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 :

Savoir si dans un string il n'y a que des Numéros


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut Savoir si dans un string il n'y a que des Numéros
    Bonjour, à tous,
    existe - t'il un mot-clef (function) en delphin qui permet de savoir si dans un string, il y a que des numéros !
    pour faire après strtoint (), ou dois-je faire une fonction qui analyse chaque caractère.

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Soit tu fais une fonction, soit tu mets ton code dans un bloc try...

  3. #3
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Tu utilises strtoint et tu interceptes l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      A : Integer;
     
    begin
      try
        A := StrToInt('125A);    // A n'est pas un chiffre
      except
        on Exception : EConvertError do
          ShowMessage(Exception.Message);
      end;
    end;

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu peux aussi faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MonResultatConverti:Extended;
    begin
    if TryStrToFloat(Edit1.Text,MonResultatConverti) then
    ShowMessage('Conversion Réussie! Le texte était bien un nombre')
    else
    ShowMessage('Conversion Echouée: Des lettres sont présentes dans l''Edit1.');
    end;
    Ce code permet à la fois de tester si l'Edit1 est contient bien un nombre et si c'est le cas, il le stocke dans la variable MonResultatConverti.

    Si c'est un échec, MonResultatConverti contiendra une chaine vide (MonResultatConverti='')

    Voilà

    PS: Il y a aussi le TryIntToStr() mais cela ne concerne que des entiers ...
    Aussi, pour TryFloatToStr, le séparateur décimal est la virgule et non le point ...

    Bon courage!
    A+

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par ero-sennin
    PS: Il y a aussi le TryIntToStr() mais cela ne concerne que des entiers ...
    Aussi, pour TryFloatToStr, le séparateur décimal est le virgule et non le point ...
    Salut
    Je pense que cela dépend de DecimalSeparator (de tes paramètres régionaux)
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Oui, exact, autant pour moi

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    T'as aussi la procedure Val(S; var V; var Code: Integer);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    var   S : string; V : Extended; // ou bien V : integer;
           code : integer;
    begin       s:=Edit1.text;
                  Val(S,V,code);
                  if code <> 0 Alors l''indice du caractère erroné est stocké dans Code ; sinon, Code est mis à zéro
    end;
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    J'ai cherché sur ce sujet que vous me proposez et vous m'avez de nouveau beaucoup appris sur les exceptions, j'aurais été presque parti pour faire une fonction qui teste toute les caractères de la variable si elle serrait numérique
    ou alphanumérique. Je pense si cette variable serait relativement longue, le test serrait aussi relativement longue,mais bon. Juste encore une petite question est-ce bien que le programme exécute une exception d'erreur cachée...

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Il n'y a aucun problème à cela

    Pour ma part, quand je veux vérifier si une variable est numérique je me fais une fonction qui utilise des exceptions (solution montrée plus haut)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function IsNumeric (sVal : String) : Boolean;
    var
      i : integer;
    begin
      try
        i := StrToInt(sVal);
        Result := True;
      Except on E:Exception do
        Result := False;
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Même Nom, mais autre implémentation, déjà cité ci-dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      {$HINTS OFF}
      function IsNumeric(Str: String): Boolean;
      var
         Code: Integer;
         V: Integer;
      begin
           Val(Str, V, Code);
           Result := Code = 0;
      end;
      {$HINTS ON}
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre actif
    Profil pro
    DEV
    Inscrit en
    Août 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Août 2006
    Messages : 182
    Points : 211
    Points
    211
    Par défaut
    je remplacerai meme StrToInt par StrToInt64 dans la fonction de Malatar pour éviter la petite blague d'une chaine numérique dépassant la taille d'un simple Int ... (ca m'est arrivé déjà ^^)

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    si tu utilise un tedit
    dans le onkeypress de celui-ci enpeche la saisie de lettre
    ca eliminera deja pas mal de probleme
    ensuite tu peut effectivement verifier si c'est une valeur valide

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Points : 95
    Points
    95
    Par défaut
    Mr Ardely.
    et bah moi j'utilise toujours ces deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function IsInt(st:String): Boolean ;
    var
     I:Integer;
    begin
      Result:=False;
      for I:=1 To Length(st) do
             If Not (st[I] In ['1','2','3','4','5','6','7','8','9','0']) Then
                exit;
      Result:=True;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function IsInteger(S: String) : Boolean;
        {IsInteger('5') => True
        IsInteger('5.5') => False
        IsInteger('Ardely') => False}
    var
     aNo,err:integer;
    begin
      Val(S,aNo,err);
      If err=0 Then Result:=True Else
      Result:=False;
    end;

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Attention si c'est pour du contrôle à la frappe avec un EDit, si l'on supprime trop de chose, on perd des comportements ...

    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
    30
    31
    32
    33
    34
    35
    36
    37
    procedure StandardIntegerKeyPress(Sender: TObject; var Key: Char);
     
       function IsNumeric(Str: string; var V: Integer): Boolean; overload;
       var
          Code: Integer;
       begin
          Val(Str, V, Code);
          Result := Code = 0;
       end;
     
       function IsNumeric(Str: string): Boolean; overload;
       var
          V: Integer;
       begin
          Result := IsNumeric(Str, V);
       end;
     
    begin
       if ((Key < '0') or (Key > '9')) then begin
          if ((Key <> #8) and (Key <> #13)) then begin
             if (Key <> #3) or (Key <> #22) or (Key <> #24) then // Copier-Coller-Couper
                Key := #0;
          end else begin
             if Sender is TEdit then begin
                if Trim(TEdit(Sender).Text + Key) = '' then begin
                   TEdit(Sender).Text := '0';
                end;
             end;
          end;
       end else begin
          if Sender is TEdit then begin
             if not IsNumeric(TEdit(Sender).Text + Key) then begin
                Key := #0;
             end;
          end;
       end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    A ShaiLeTroll : dans ton code de 15h51 que re-voiçi, ça fait quoi le {$HINTS OFF} et le {$HINTS ON} ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    {$HINTS OFF}
      function IsNumeric(Str: String): Boolean;
      var
         Code: Integer;
         V: Integer;
      begin
           Val(Str, V, Code);
           Result := Code = 0;
      end;
      {$HINTS ON}
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Points : 95
    Points
    95
    Par défaut
    Gilbert Geyer a écrit :
    A ShaiLeTroll : dans ton code de 15h51 que re-voiçi, ça fait quoi le {$HINTS OFF} et le {$HINTS ON} ?
    {$HINTS OFF}
    Là le compilateur ne générera pas d'informations de variable inutilisée lors
    de la compilation du code placé entre ces deux directives.
    {$HINTS ON}

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    J'ai du avoir un conseil du genre 'affectation inutile' ... ligne éliminé, bla bla bla ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Et merci pour vos réponses concernant HINTS OFF et ON
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut


    elle est vachement compliqué ta fonction keypress


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if Not (Key in ['0'..'9',#8,#13]) Then 
         Key := #0;
      if Key <> #0 then
        inherited KeyPress(Key);
    tu peut rajouter les code que tu veut mais c'est quand meme plus lisible


    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #20
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par anapurna
    salut


    elle est vachement compliqué ta fonction keypress


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if Not (Key in ['0'..'9',#8,#13]) Then 
         Key := #0;
      if Key <> #0 then
        inherited KeyPress(Key);
    tu peut rajouter les code que tu veut mais c'est quand meme plus lisible


    @+ Phil
    La tienne aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if Not (Key in ['0'..'9',#8,#13]) Then 
         Key := #0;
    C'est largement suffisant ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Triage de données dans un String
    Par Poilou dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/01/2004, 16h21
  2. retour chariot dans un string
    Par bono dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/12/2003, 12h17
  3. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26
  4. Recherche d'un String dans un String ?
    Par apen2k2 dans le forum Langage
    Réponses: 9
    Dernier message: 14/04/2003, 11h08
  5. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33

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