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

 Delphi Discussion :

Tester si valeur saisie est une chaîne de caractère


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Tester si valeur saisie est une chaîne de caractère
    Bonjour je veut tester si la valeur saisie est une chaîne de caractère mais je ne me souviens plus de se qui faut mettre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try
            unpays:=?(zs_pays.Text);
            unecapital:=?(zs_capital.Text);
            unemonnaie:=?(zs_monnaie.Text);  
          Except
            Application.MessageBox('Erreur de saisie veuillez recommencer', 'Erreur',MB_ICONERROR + MB_OK);
          end;
    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bonjour et bienvenue

    Je suppose que zs_* sont des TEdit.
    La propriété Text d'un TEdit renvoie un string, donc c'est par nature une chaine de caractères alphanumériques.

    Faut-il se poser la question à l'envers ? C'est à dire: Est-ce que la valeur saisie est un nombre (ou une date) ?

    @+ Claudius

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    d'accord donc je veut le tester pour vérifier si ce n'est pas un entier donc sa doit être un inttostr ou strtoint ? Je ne sait jamias comment les utiliser.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par mtxmotorax Voir le message
    ... ça doit être un inttostr ou strtoint ?
    Dans le cas présent StrToInt, puisque l'on souhaite transformer une chaine (Str) vers (To) un entier (Int).
    Mais il faudra gérer l'exception levée si la conversion échoue.

    Sinon voir TryStrToInt qui ne lève pas d'exception et renvoie True si la conversion à réussie (ou False dans le cas contraire).

    [edit]
    Ou alors, si le contexte s'adapte, c'est à dire si un TEdit ne doit recevoir que des caractères alphabétiques (ou numériques) voir l'événement OnKeyPress. (Tu as un exemple dans la FAQ et de multiples exemples sur le forum).

    @+ Claudius.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    quand je met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try
            unpays:=StrToInt(zs_pays.Text);
            unecapital:=StrToInt(zs_capital.Text);
            unemonnaie:=StrToInt(zs_monnaie.Text);
     Except
            Application.MessageBox('Erreur de saisie veuillez recommencer', 'Erreur',MB_ICONERROR + MB_OK);
          end;
    Je ne peut pas compiler car il y a une erreur "Type incompatible"

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Les variables UnPays, UneCapitale et UneMonnaie sont de quel type ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est variables sont destinées à aller dans un tableau

    Dans ma procédure elle sont déclaré comme cela:
    unpays:mot30;
    unecapital:mot30;
    unemonnaie:mot30;


    Et dans les type:
    mot30=string[30];

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 717
    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 717
    Points : 25 613
    Points
    25 613
    Par défaut
    Citation Envoyé par mtxmotorax Voir le message
    Bonjour je veut tester si la valeur saisie est une chaîne de caractère mais je ne me souviens plus de se qui faut mettre.
    Citation Envoyé par mtxmotorax Voir le message
    d'accord donc je veut le tester pour vérifier si ce n'est pas un entier donc sa doit être un inttostr ou strtoint ? Je ne sait jamias comment les utiliser.
    tu sais que tu es difficile à comprendre, tu penses tout à l'envers !
    On teste le cas Normal, tout le reste est Erreur, c'est nettement plus simple !

    Sinon, tu pousse un peu, tu veux affecter un entier à un string[30], c'est normal que cela ne fonctionne pas !
    Faudrait maitriser un peu plus les bases du langage Delphi (et peut-être du Français)
    Sinon un entier, c'est au plus string[11] (10 chiffre + signe) et un flottant string[20] (15-19 chiffre + signe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
      Dummy: Integer; // voir Double et TryStrToFloat si nombre à virgule !   
    begin     
      if TryStrToInt(zs_pays.Text, Dummy) and TryStrToInt(zs_capital.Text, Dummy) and TryStrToInt(zs_monnaie.Text, Dummy) then
      begin
        unpays:=zs_pays.Text;
        unecapital:=zs_capital.Text;
        unemonnaie:=zs_monnaie.Text;
      end
      else
       MessageDlg('Erreur de saisie veuillez recommencer', mtError, [mbOk], 0);
    MessageDlg c'est plus simple que Application.MessageBox

    C'est pour un devoir scolaire ?

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    oui, vaut il mieux faire ce test avec un If ou un Try ?

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 717
    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 717
    Points : 25 613
    Points
    25 613
    Par défaut
    StrToInt appelle TryStrToInt et déclenche une Exception si son retour est false !
    Donc oui, un appel direct à TryStrToInt et un if est donc plus efficace, cela évite des opérations inutiles !

    En général, il vaut mieux préférer un test des valeurs de retour et gérer les exceptions pour les erreurs imprévues (TimeOut, OutOfMemory) ou alors pour remonter une erreur dans une longue chaine d'appel de fonctions !

Discussions similaires

  1. comment tester si la saisie est une valeur numerique
    Par abj8077 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 11/11/2011, 23h58
  2. Modifier la valeur numérique dans une chaîne de caractère
    Par ab1to dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/03/2010, 15h08
  3. Réponses: 2
    Dernier message: 12/11/2009, 17h34
  4. Réponses: 18
    Dernier message: 15/11/2005, 11h13
  5. [NASM] Saisie d'une chaîne de caractères
    Par Skyounet dans le forum Assembleur
    Réponses: 9
    Dernier message: 29/08/2005, 13h31

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