verifier le type d'une chaine de caractere

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

verifier le type d'une chaine de caractere

Message par Patrick88 »

certainement moins complet que la lib typeof() posté par ????

Code : Tout sélectionner

Enumeration
  #EST_UN_NOMBRE
  #EST_UNE_CHAINE
EndEnumeration

Procedure.b isnumber(chaine.s)
  If Val(chaine)=0
    If Left(chaine,1)="0"
      result=#EST_UN_NOMBRE
    Else
      result=#EST_UNE_CHAINE
    EndIf
  Else
    result=#EST_UN_NOMBRE
  EndIf
  ProcedureReturn result
EndProcedure

Debug "VALEUR "+Str(#EST_UN_NOMBRE)+" POUR UN NOMBRE"
Debug "VALEUR "+Str(#EST_UNE_CHAINE)+" POUR UNE CHAINE DE CARACTERE"
Debug isnumber("123")
Debug isnumber("-123")
Debug isnumber("abc")
pat
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

il y a plus simple

Code : Tout sélectionner

Procedure IsVal(Chaine.s)
  ; Retourne différent de 0 si la chaine est un nombre
  ProcedureReturn Val(Chaine + "1")
EndProcedure

Debug IsVal("12")
Debug IsVal("-1052")
Debug IsVal("0")
Debug IsVal("bonjour")
en fait j'ajoute "1" à la fin de la chaine, ainsi, je suis sur de ne pas tomber sur la valeur 0 qui est litigieuse car
Val("0") = 0
et
Val("abc") = 0
donc on ajoutant 1, quand le résultat est nul, j'ai obligatoirement une chaine
Val("0" + "1") = Val("01") = 1
et
Val("abc" + "1") = Val("abc1") = 0

Par contre
Val("10abc") renvoie 10 mais dans ce genre de cas, pour être sur, il faut tester chaque caratère.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

C'était ma lib à moi (qui n'a pas carburé !).
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Heis Spiter a écrit :C'était ma lib à moi (qui n'a pas carburé !).
Ca serait bien de regrouper aussi les lib fr sur le même site que les codes et tutos :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je n'arrive pas à voir l'utilité de ce bout de code :?

Si c'est une chaine, c'est une chaine, quoi qu'elle puisse contenir!
Non...?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Pour tester si c'est une chaine de type "10abc"

Code : Tout sélectionner

Procedure IsVal(Chaine.s) 
  ;Retourne 1 si c'est un nombre ENTIER 
  a=Val(Chaine)
  b.s=Str(a)
  If Chaine=b
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf  
EndProcedure 

Debug IsVal("12") 
Debug IsVal("-1052") 
Debug IsVal("0") 
Debug IsVal("bonjour")
Debug IsVal("10abc")
Et ça peut servir pour un input() du genre :

Code : Tout sélectionner

printN("Indiquez votre âge :")
Age$=input()
If IsVal(Age$)
  PrintN("Ok")
Else
  PrintN("Ce n'est pas un nombre")
Endif
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

J'ai utilisé ce code dans mon PureLoto contrôleur pour tester que la chaine est strictement composée de chiffres

Code : Tout sélectionner

      ; on vérifie chaque caractère pour déterminer si c'est un chiffre
      For i = 0 To (Len(A$) - 1)
         Valeur = PeekB(@A$ + i)
         If Valeur < 48 Or Valeur > 57 ; c'est une erreur
            Erreur + 1
         EndIf
      Next i
Dernière modification par Anonyme2 le dim. 07/nov./2004 9:59, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

D'accord!
Effectivement, ça peut servir.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tiens, y a Denis sur TF1
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

???
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

???
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

???
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

C'est pour toi Chris,


c'est quoi ce TF1 ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

La télé!

J'ai vu ton avatar dans un dessin animé. (Je zappais, je précise, sinon, on va croire que je regarde les dessins animés) :lol:
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

En fait il zappait des infos sur les dessins animés pour préciser un peu plus :jesors:
Répondre