IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Existe-t-il une fonction "IsAlphaNumérique" ?


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut Existe-t-il une fonction "IsAlphaNumérique" ?
    Genre IsAlphaNumerique('a' ou '1'-'9') = true
    et IsAlpha('a') = true et IsAlpha('1')= false

    Donnez moi le truc le plus rapide que vous avez (genre fonction toute faite dans delphi)

    Merci à tous

    ps : il est interdit de me demander pourquoi comment et de me dire qu'il y a des outils gna gna gna qui font du parsing.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    C'est tj sympa de dire un bonjour lors d'un post....

    Donnez moi le truc le plus rapide que vous avez (genre fonction toute faite dans delphi)
    Un petit frère aussi

    il est interdit de me demander pourquoi comment et de me dire qu'il y a des outils gna gna gna qui font du parsing
    A bon, si c'est interdit ok.

    A+ man

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    si je te demande d'effacer le message tu ne pourras plus le faire mais si je ne le fais pas ton message sans intérêt va rester . Que faire ??

    trop tard ...

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    tsss on se calme ou j'efface tout

    Un brin de sérieux, ta fonction doit travailler sur des caractères isolés ou sur une chaine complète ? Doit-elle être rapide ou facilement lisible ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    je prend les caractères un par un et je recherche la rapidité. Il faut cependant que je sois indépendant du code ascii. Je te mets où j'en suis :
    ca va pas être difficile de faire mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    function TParser.IsAlpha(c: Char): Boolean;
    begin
    	case c of
            'a'..'z':
            	result := true;
            'A'..'Z':
            	result := true;
            '_':
            	result := true;
            else
            	result := False;
            end;
    end;
     
    function TParser.IsNumeric(c: Char): Boolean;
    begin          
    	case c of
            '0'..'9':
            	result := true;
            else
            	result := False;
            end;
    end;      
     
    function TParser.IsAlphaNumeric(c: Char): Boolean;
    begin
    	result := IsAlpha(c) or IsNumeric(c);
    end;

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Je m'excuse, c'est un peu pour faire la remarque mais bon....

    Voila un exemple pour IsAlphaNum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Function TForm1.IsAlphaNum(Text : String) : Boolean;
    Var
    X : integer;
    Begin
       For X := 1 to Length(text) do begin
         Try
         StrToInt(Text[x]);
         Result := True;
         Exit;
         Except
         end;
       end;
    Result := False;
     
    end;
    Pour la rapidité...heu , je pense pas que cela va poser problème , c'est juste un boucle sur la taille du texte (au plus) donc, pas tres énorme.

    [Edit] Oup's, j'ai mal compris ta question avec ton AlphaNumérique .

    Mais bon, ca reste dans la meme logique
    [/edit]

  7. #7
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Non, tu n'es pas si loin. Ta solution est l'une des plus rapide. Pense par contre qu'il faut toujours tester dans l'ordre des codes pour que le Case soit encore plus rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function TParser.IsAlpha(c: Char): Boolean;
    begin
    	case c of
            'A'..'Z':
            	result := true;
            '_':
            	result := true;
            'a'..'z':
            	result := true;
            else
            	result := False;
            end;
    end;
    Avec les optimisations actives, passer à l'assembleur n'apportera pas grand chose.

    Pour info la solution moins rapide mais plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function TParser.IsAlpha(c: Char): Boolean;
    begin
      Result := C In ['A'..'Z','_','a'..'z'];
    end;

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    ok merci pour tout

    bon je peux le dire maintenant, c'est pour refaire un langage de programmation que j'ai plaisir à utiliser !!! (pas comme Delphi, Java, C++, C#, etc..)

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45
  2. Existe-t-il une fonction "Chercher" dans un TWebBrowser ?
    Par Michel Devaud dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/12/2004, 07h30
  3. Réponses: 7
    Dernier message: 03/12/2004, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo