Page 2 sur 2

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 16:02
par falsam
Update : Ajout de #PB_Float
Ollivier a écrit :Debug GetTypeof(10.10) ;Integer (d)
Debug GetTypeof(-10.10) ;Integer (e)
Le problème devrait être résolu.

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 17:06
par Ollivier
Falsam a écrit :Update : Ajout de #PB_Float
Suggestion a écrit :Si tout restait décimal, cela permettrait la possibilité de traiter aussi "Test10".
Est-ce prévu?

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 17:11
par falsam
@Ollivier: Je ne te suis pas.
Si tout restait décimal, cela permettrait la possibilité de traiter aussi "Test10".
Debug GetTypeof("test10") retournera un string

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 18:37
par Ollivier
Falsam a écrit :Je ne te suis pas.
C'est pour savoir si ton code source en 2ème tête de 1ère page, il peut cesser de gesticuler pour la photo...

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 18:54
par falsam
falsam a écrit :C'est pour savoir si ton code source en 2ème tête de 1ère page, il peut cesser de gesticuler pour la photo...
Comme disais ma fille ? Gné ? :mrgreen:

Désolé, mais google translate ne traduit pas le langage Ollivier.

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 19:30
par Ollivier
Je vais en faire une de ces guirlandes, moi de son code...

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 19:57
par Micoute
falsam a écrit :Update : Ajout de #PB_Float
Ollivier a écrit :Debug GetTypeof(10.10) ;Integer (d)
Debug GetTypeof(-10.10) ;Integer (e)
Le problème devrait être résolu.
Et bien voilà, on avance !

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 22:41
par falsam
Update: Petite erreur mineure dans le code. le paramètre DecimalCharacter ne sert à rien. Mise à jour effectuée.

:arrow: http://www.purebasic.fr/french/viewtopi ... 30#p175730

Re: TypeOf() avec un paramétre sans Data Type

Publié : sam. 12/sept./2015 23:48
par nico
C'est vraiment bien pensé, surtout le coup des quotes, cela me fait pensez au débat sur une procédure IsNumeric sur le forum English.

Le GetTypeof(...) de valeur numérique directement inscrite comme GetTypeof(10) m'intrigue; dans quel cas cela pourrait t'il servir puisque c'est le programmeur qui l'écrit et que c'est immuable, dans les macros peut être ?

Re: TypeOf() avec un paramétre sans Data Type

Publié : lun. 14/sept./2015 12:49
par Ollivier
Plus court de 5 lignes, puisque t'es preneur pour plus court. J'avoue que la question de nico est d'un.grand intérêt, à quoi ça sert?

Code : Tout sélectionner

Procedure Chk(A, B, C = 255)
	ProcedureReturn Bool((B <= A) And (A <= C) )
EndProcedure
Procedure Check(A$, B, C, D)
	If D
		E = Chk(Asc(Left(A$, 1) ), B, C)
		ProcedureReturn (E * Check(Mid(A$, 2), B, C, D - 1) )
	EndIf
	ProcedureReturn 1
EndProcedure
Procedure _GetTypeOf(Expr.S, DecimalCharacter)	
	Y = Bool(Check(Expr, '0', '9', 1) Or (Bool(Abs(Asc(Left(Expr, 1) ) - 44) = 1) ) )
	X = Bool(FindString(Expr, Chr('.') ) )
	ProcedureReturn (Y * ((X * #PB_Float) + (((X ! 1) * #PB_Integer) ) ) ) + ((Y ! 1) * #PB_String)
EndProcedure
Macro GetTypeOf(Value =, DecimalCharacter ='.')
	_GetTypeOf("" + Value, DecimalCharacter)
EndMacro





Debug GetTypeOf("test") ;String
Debug GetTypeOf("10") ;Integer
Debug GetTypeOf("10.10");Float
Debug GetTypeOf(10) ;Integer
Debug GetTypeof(10.10) ;Float
Debug GetTypeof(-10.10) ;Float
Debug GetTypeof("test10") ;String

Re: TypeOf() avec un paramétre sans Data Type

Publié : jeu. 08/oct./2015 12:20
par blendman
salut

Je relance ce sujet, car je cherchais exactement la même chose.

Code : Tout sélectionner

; GetTypeOf(Value)
; Contributor falsam
;
; PB 4.31 -> 4.40
;

Procedure _GetTypeOf(numstr.s)
  Protected Result, Pattern.s = "^[-+]?[0-9]*\.?[0-9]+$"
  Protected RegEx = CreateRegularExpression(#PB_Any, Pattern)
  If RegEx
    Result = MatchRegularExpression(RegEx, numstr)
    FreeRegularExpression(RegEx)
    If result
      If CountString(numstr, ".") = 1
        ProcedureReturn #PB_Float
      Else
        ProcedureReturn #PB_Integer
      EndIf
    Else
      ProcedureReturn #PB_String
    EndIf
  EndIf
EndProcedure

Macro Quote
  ""
EndMacro

Macro GetTypeOf(Value=)
  _GetTypeOf(Quote + Value + Quote)
EndMacro


Procedure PrintC_2(txt$)
  ; ici, on utilise le txt$, pour l'afficher par exemple
EndProcedure

Macro PrintC(text)
  
  If GetTypeOf(text) = #PB_String
    Debug "text"
    PrintC_2(text)
  Else
    Debug"value"
    PrintC_2(Str(text))
  EndIf
    
EndMacro

PrintC("salut")
result = 10
PrintC(result)
    
J'ai testé ce code-ci, mais ça ne marche pas. C'est d'ailleurs logique, mais s'il y a moyen de contourner ça, je suis preneur ;).