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.
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.
Soit tu fais une fonction, soit tu mets ton code dans un bloc try...
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;
Salut,
Tu peux aussi faire ceci:
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.
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;
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+
SalutEnvoyé par ero-sennin
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
Oui, exact, autant pour moi
Bonjour,
T'as aussi la procedure Val(S; var V; var Code: Integer);
A+
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;
N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi
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...
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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
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à ^^)
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
Blaise PascalNous 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.
PS : n'oubliez pas le tag
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;
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
Bonjour,
A ShaiLeTroll : dans ton code de 15h51 que re-voiçi, ça fait quoi le {$HINTS OFF} et le {$HINTS ON} ?
A+
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}
N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi
{$HINTS OFF}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} ?
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}
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
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
salut
elle est vachement compliqué ta fonction keypress
tu peut rajouter les code que tu veut mais c'est quand meme plus lisible
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);
@+ Phil
Blaise PascalNous 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.
PS : n'oubliez pas le tag
La tienne aussiEnvoyé par anapurna
C'est largement suffisant ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if Not (Key in ['0'..'9',#8,#13]) Then Key := #0;
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager