ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 2010
-
17 févr. 2005 à 12:39
Jean_Elens
Messages postés53Date d'inscriptiondimanche 29 mai 2005StatutMembreDernière intervention16 octobre 2006
-
1 juin 2005 à 19:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Jean_Elens
Messages postés53Date d'inscriptiondimanche 29 mai 2005StatutMembreDernière intervention16 octobre 2006 1 juin 2005 à 19:56
le composant "microsoft masked edit control 6.0" fait la même chose sans probleme, sans alourdir mon code, ... bref l'ideal avec bien plus de possibilités.
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 27 févr. 2005 à 15:30
Grandvizir tu lis les post ?
Il n'y a pas que "France Telecom" qui attribue des n°de téléphonne dans le monde, le 1234 est un numéro valide en belgique et certainement dans bien d'autres pays, d'autre part, avec la libèralisation des télécoms, qui sais ce que rèserve l'avenir. Si toi tu sais, alors change de nick pour "Mme Irma".
Bon Coding...
ManChesTer.
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 26 févr. 2005 à 22:23
grandvizir> ce serai pas une sorte d'algo dont tu parle pour vérifier la validité du num?
ps: il faut savoir ke je suis en belgique et j'utilise ce code pour uniquement les numéro qui commence par 047 - 048 - 049. Donc cette fonction me suffisais largement
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 26 févr. 2005 à 22:08
Y'aurait plus sophistiqué comme processus. Sur une doc de France Telecom, on pouvait lire que certaines combinaisons de chiffres sont impossibles. Exemples tirés du hasard:
01 49 ... est possible
01 23 ... est impossible
Si c'est pour vérifier une saisie, autant prendre directement TMaskEdit en mode numéro de téléphone et on n'en parle plus.
japee> Please, ne dit rien... Pas d'interprétations virtuelles !
Debiars
Messages postés285Date d'inscriptionlundi 16 juin 2003StatutMembreDernière intervention11 février 2018 26 févr. 2005 à 15:10
lol les gars,
ça me rappelle ma jeunesse, quand nous discutions de la meilleure façon de tester la validité d'une date...
Au fait, pourriez essayer, pas!
amicalement
jp
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 20 févr. 2005 à 23:50
Remarquez que mon code n'est pas stricte
il permet d'accepter par exemple 101, 1391, +32/0800.24.25 ou encore 24.12.23 qui peuvent etre des numéro valides....
à vous de tester les valuers que vous voulez exclure, par exemple les répétitions genre 00.01.01.01, mais attention le 80.01.01, et les exemples ci dessus sont possibles donc prudence ....
Bon Coding...
ManChesTer.
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 20 févr. 2005 à 23:42
oupps le bo bug...
Function isValidPhoneNumber(N:String):Boolean;
Var PhoneInNum : Int64;
Code,Value : Integer;
begin
Result:=False;
Code:=Length(n);
if Length(N)>0 then
begin
if n[1]='+' then
begin
delete(n,1,1);
dec(code);
end;
For Value:=1 to Code do
if n[Value] in ['-','/','.'] then
n[Value]:='0';
end;
Val(N,PhoneInNum,Code);
if (code<>0) or (PhoneInNum=0) then
begin
SetLastError(1781);
Exit;
end;
Result:=True;
end;
La c'est + mieux
Bon Coding...
ManChesTer.
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 20 févr. 2005 à 23:23
Voici ma fonction pour tester les n° valides :
Format International : +31-6/123.123.14.14
Function isValidPhoneNumber(N:String):Boolean;
Var PhoneInNum : Int64;
Code,Value : Integer;
begin
Result:=False;
Code:=Length(n);
if Length(N)>0 then
begin
if n[1]='+' then
begin
delete(n,1,1);
dec(code);
end;
For Value:=0 to Code do
if n[Value] in ['-','/','.'] then
n[Value]:='0';
end;
Val(N,PhoneInNum,Code);
if (code<>0) or (PhoneInNum=0) then
begin
SetLastError(1781);
Exit;
end;
Result:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if isValidPhoneNumber(Edit1.Text) then
Showmessage('Numèro Valide')
else
Showmessage(SysErrorMessage(GetLastError));
end;
Bon Coding...
ManChesTer.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 19 févr. 2005 à 00:12
Japee : regarde dans les options du projet, onglet "Compilateur" : évaluation booléenne complète.
Et dire qu'en utilisant les expressions régulières tout serait si simple. Exemple pour un numéro de téléphone au format international, tester la chaine avec le pattern : (\+\d *)?(\(\d+\) *)?(\d+(-\d*)*)
Ben oui, un n° de téléphone français peut aussi être exprimé en précisant le préfixe à l'internationale. Dans ce cas, il fait plus de dix chiffres !
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 févr. 2005 à 19:04
Ouais, Mauricio, question intéressante !
Avec l'opérateur "or", je crois que Delphi teste d'abord le premier terme de l'expression, et s'il est True, n'estime pas utile de tester le deuxième, puisque c'est suffisant pour que la condition soit valide.
On peut changer cet état de fait avec une directive de compilation, je ne sais pas laquelle.
Sinon, c'est bien pratique...
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 févr. 2005 à 18:56
sosodef88> Vu comme ça, évidemment...
Faudrait alors intituler ton source :
VERIFIER SI UN NUMERO DE TELEPHONE EST VALIDE
et ta fonction devrait s'appeler :
function IsTelephonicNumber(src: string): bool;
ou un truc dans le genre... ;)
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 18 févr. 2005 à 18:45
Et moi qui croyait qu' on pouvait pas faire:
if (Str = '') or (not (Str[1] in ['-', '0'..'9']))
parce que la chaine peut etre vide et que donc Str[1] allait provoquer une erreur ?!!! Donc, le système teste bien Str='' avant de tester l' autre condition. Arg, j' y crois pas ...
Attention tout de meme parce que :
if (Str <> '') or (not (Str[1] in ['-', '0'..'9']))
Là, ça marche pas evidemment, pinaise (haa ce Homer)!
Sinon Sosodef88: utilise des génériques !!! Non, je parle pas de médicaments mais des fonctions !
J' explique: si tu crées une fonction IsNumeric, elle pourra fonctionner dans d' autres programmes, tu me suis là? donc, il faut que tu testes si la chaine est vide. Comme ça, tu auras une fonction 100% utilisable !!!
A+
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 18 févr. 2005 à 17:25
Veuillez m'excuser j'utilisais cette source pour un programme qui permet d'envoyer des texto (le num de phone) et par conséquent je mettais: if length(var) < 10 then ....... puisque qu'il y a toujours 10 numéro dans un num gsm ......
bonne journée a +
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 févr. 2005 à 16:30
Ouais, et puis aussi, je veux pas cafter, je ne citerai donc pas ni69 et jpm77, mais eux non plus ils n'ont pas tenu compte de la chaîne vide dans leur code, non mais, c'est vrai, quoi... c'est toujours les mêmes qui trinquent ! snif...
Et l'auteur du source non plus, il l'a pas fait, na !
Non mais... ;)
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 févr. 2005 à 16:11
Exact, Mauricio, j'avais oublié la chaîne vide... >:(
Voici ma version, qui n'apporte rien de plus que la tienne, mais qui utilise une spécificité de Delphi (je crois ?), les ensembles énumérés :
function IsNumeric(Src: String): Bool;
var B: Integer;
begin
Result := False;
if (Src = '') or (not (Src[1] in ['-', '0'..'9'])) then Exit;
for B := 2 to Length(Src) do
if not (Src[B] in ['0'..'9']) then Exit;
Result := True;
end;
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 18 févr. 2005 à 10:57
Il y a une erreur: mon doigt a glissé ! Decidemment ...
function IsNumeric(src: string): bool;
const Num = '0123456789';
var B: integer;
begin
Result := false;
if length(src) > 0 then begin
RESULT :(src[1] '-') or (pos(src[1], num) <> 0);
for B := 2 to length(src) do
begin
if pos(src[B], num) = 0 then
Result := false;
Exit;
end;
end;
end;
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 18 févr. 2005 à 10:55
Oui! evidemment!
Des fois c' est tellement gros qu' on voit pas !
Mais tu as tord d' inicialiser RESULT à True Japee: imagine que la chaine est vide !
function IsNumeric(src: string): bool;
const Num = '0123456789';
var B: integer;
begin
Result := false;
if length(src) > 0 then begin
RESULT :(src[1] '-') or (pos(src[1], num) <> 0);
for B := 2 to length(src) do
begin
if pos(src[1], num) = 0 then
Result := false;
Exit;
end;
end;
end;
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 17 févr. 2005 à 22:27
Je voulais dire :
"for B := 1 to Length(src) do..."
bien sûr, mes doigts ont dérapé !
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 17 févr. 2005 à 22:25
Et encore, non, ma fonction peut être fausse également, si la longueur du String à tester dépasse 10, évidemment !
Genre : '123456789OK'
Non, il faut envisager une approche complètement différente, où tu ne fais pas une boucle par rapport à '0123456789', mais par rapport à la longueur de la chaîne à tester :
for B := 1 to Length(b) do...
Bonne continuation ;)
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 17 févr. 2005 à 22:17
Oh la la...
Personne ne l'a testée ou quoi, cette fonction ?
Et alors, sosodef88, toi non plus on dirait !
Ca ne peut pas fonctionner, le résultat sera toujours false si chaîne à tester < 10.
Par exemple : '581' donne False,
et Length(String) > que 10 : '1345674488KO' donne True !!!
Explications :
Si la longueur du string est inférieure à 10, ça va continuer à "boucler" et forcément, pos = 0 donc Result := False, CQFD.
Au contraire, si length du string >= 10, ça va s'arrêter à B := 10 et Result := True, forcément.
Un dépannage :
function IsNumeric(src: string): bool;
const Num = '0123456789';
var B: integer;
begin
Result := true;
for B := 1 to 10 do
begin
if pos(copy(src, B, 1), num) = 0 then
Result := false;
Exit;
end;
end;
mais l'approche ne me plait pas trop...
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 17 févr. 2005 à 15:07
Bien sûr que je plaisante les gars: faut juste voir si le 1er caractere est le signe moins !
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 17 févr. 2005 à 15:04
Piti problème (je la fait à la Homer là ...): si je passe la string '' !!!
Faudrait inicialiser ta fonction à False. Ok?
Malheureusement, ta fonction ne détecte pas non plus le signe moins alors que -5 est bien une valeur numerique !
Appelle ta fonction IsWord et voilà!
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 17 févr. 2005 à 13:09
Houlaaa, j'avais pas que j'étais à la traine dans ma réponse, je devais faire autre chose aussi.
Oui effectivement ça fait un peu bricoler, mais comme là où je suis ils ne veulent pas de try/except.... allez savoir
++
Moustachu
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 17 févr. 2005 à 13:03
jmp77 >> lol ;)
moustachu >> Ce code me parait un peu bricolé... ;)
Je reste à StrToFloat :P
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 17 févr. 2005 à 12:59
ou comme ça aussi
Function IsNumeric(p_varIn: Variant) : Boolean;
var
intCode: Integer;
extValue: Extended;
begin
// Si le variant est de type String
if VarIsStr(p_varin) then
begin
// Test si peut correspondre à Extended
val(p_varIn, extValue, intCode);
// Si code=0 -> p_varIn est "extended"
Result :(intCode 0);
end else begin
// Test Si variant est numérique
result := VarIsNumeric(p_varin);
end;
end;
Ca te permet de savoir si ton nombre est numérique (dont nombre à virgule).
++
Moustachu
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 17 févr. 2005 à 12:59
Oups désolé Ni69 mais j'avais ouvert la source et j'etais partis a autre chose et je n'avais pas vu ton commentaire au moment ou j'ai posté.
Mais les grands esprits se rencontre a ce que je vois lol.
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 17 févr. 2005 à 12:57
Hello,
Attention La fonction ISNumeric existe deja par défaut sous delphi :
Unit: IdGlobal
Determines if a character is a numeric digit.
function IsNumeric(c: char): Boolean;
Parameters
c: char
Character to be examined.
Returns
Boolean - True if the character is a numeric digit.
Description
IsNumeric is a Boolean function that indicates if the character in c contains a numeric digit in the range '0'..'9'.
Sinon moi je ferrais ceci :
function IsInteger(src:string):bool;
begin
Result := True;
Try
StrToInt(Src);
Except
Result := False;
end;
end;
++,
JMP77.
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 17 févr. 2005 à 12:39
Tu peux faire aussi comme ça :
function IsNumeric(scr:string):Boolean;
begin
result := true;
try
StrToFloat(scr); // utilisation de Float pour la détection de nombres à virgule ;)
except
result := false
end;
end;
Malgré tout, ta fonction a l'avantage de pouvoir être utilisée dans l'EDI malgré le compilateur. En effet, ce que je te propose ne marche qu'en dehors de l'EDI, dans un prog déjà compilé, sans les alertes du compilateur dues à except :P
Conseil : ce serait bien que tu rajoutes la détection de la virgule dans ta chaîne de caractères pour permettre de faire des tests avec des extended :)
1 juin 2005 à 19:56
27 févr. 2005 à 15:30
Il n'y a pas que "France Telecom" qui attribue des n°de téléphonne dans le monde, le 1234 est un numéro valide en belgique et certainement dans bien d'autres pays, d'autre part, avec la libèralisation des télécoms, qui sais ce que rèserve l'avenir. Si toi tu sais, alors change de nick pour "Mme Irma".
Bon Coding...
ManChesTer.
26 févr. 2005 à 22:23
ps: il faut savoir ke je suis en belgique et j'utilise ce code pour uniquement les numéro qui commence par 047 - 048 - 049. Donc cette fonction me suffisais largement
26 févr. 2005 à 22:08
01 49 ... est possible
01 23 ... est impossible
Si c'est pour vérifier une saisie, autant prendre directement TMaskEdit en mode numéro de téléphone et on n'en parle plus.
japee> Please, ne dit rien... Pas d'interprétations virtuelles !
26 févr. 2005 à 15:10
ça me rappelle ma jeunesse, quand nous discutions de la meilleure façon de tester la validité d'une date...
Au fait, pourriez essayer, pas!
amicalement
jp
20 févr. 2005 à 23:50
il permet d'accepter par exemple 101, 1391, +32/0800.24.25 ou encore 24.12.23 qui peuvent etre des numéro valides....
à vous de tester les valuers que vous voulez exclure, par exemple les répétitions genre 00.01.01.01, mais attention le 80.01.01, et les exemples ci dessus sont possibles donc prudence ....
Bon Coding...
ManChesTer.
20 févr. 2005 à 23:42
Function isValidPhoneNumber(N:String):Boolean;
Var PhoneInNum : Int64;
Code,Value : Integer;
begin
Result:=False;
Code:=Length(n);
if Length(N)>0 then
begin
if n[1]='+' then
begin
delete(n,1,1);
dec(code);
end;
For Value:=1 to Code do
if n[Value] in ['-','/','.'] then
n[Value]:='0';
end;
Val(N,PhoneInNum,Code);
if (code<>0) or (PhoneInNum=0) then
begin
SetLastError(1781);
Exit;
end;
Result:=True;
end;
La c'est + mieux
Bon Coding...
ManChesTer.
20 févr. 2005 à 23:23
Format International : +31-6/123.123.14.14
Function isValidPhoneNumber(N:String):Boolean;
Var PhoneInNum : Int64;
Code,Value : Integer;
begin
Result:=False;
Code:=Length(n);
if Length(N)>0 then
begin
if n[1]='+' then
begin
delete(n,1,1);
dec(code);
end;
For Value:=0 to Code do
if n[Value] in ['-','/','.'] then
n[Value]:='0';
end;
Val(N,PhoneInNum,Code);
if (code<>0) or (PhoneInNum=0) then
begin
SetLastError(1781);
Exit;
end;
Result:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if isValidPhoneNumber(Edit1.Text) then
Showmessage('Numèro Valide')
else
Showmessage(SysErrorMessage(GetLastError));
end;
Bon Coding...
ManChesTer.
19 févr. 2005 à 00:12
Et dire qu'en utilisant les expressions régulières tout serait si simple. Exemple pour un numéro de téléphone au format international, tester la chaine avec le pattern : (\+\d *)?(\(\d+\) *)?(\d+(-\d*)*)
Ben oui, un n° de téléphone français peut aussi être exprimé en précisant le préfixe à l'internationale. Dans ce cas, il fait plus de dix chiffres !
Pour ceux que seraient intéressés, allez voir : http://www.regexlib.com
18 févr. 2005 à 19:04
Avec l'opérateur "or", je crois que Delphi teste d'abord le premier terme de l'expression, et s'il est True, n'estime pas utile de tester le deuxième, puisque c'est suffisant pour que la condition soit valide.
On peut changer cet état de fait avec une directive de compilation, je ne sais pas laquelle.
Sinon, c'est bien pratique...
18 févr. 2005 à 18:56
Faudrait alors intituler ton source :
VERIFIER SI UN NUMERO DE TELEPHONE EST VALIDE
et ta fonction devrait s'appeler :
function IsTelephonicNumber(src: string): bool;
ou un truc dans le genre... ;)
18 févr. 2005 à 18:45
if (Str = '') or (not (Str[1] in ['-', '0'..'9']))
parce que la chaine peut etre vide et que donc Str[1] allait provoquer une erreur ?!!! Donc, le système teste bien Str='' avant de tester l' autre condition. Arg, j' y crois pas ...
Attention tout de meme parce que :
if (Str <> '') or (not (Str[1] in ['-', '0'..'9']))
Là, ça marche pas evidemment, pinaise (haa ce Homer)!
Sinon Sosodef88: utilise des génériques !!! Non, je parle pas de médicaments mais des fonctions !
J' explique: si tu crées une fonction IsNumeric, elle pourra fonctionner dans d' autres programmes, tu me suis là? donc, il faut que tu testes si la chaine est vide. Comme ça, tu auras une fonction 100% utilisable !!!
A+
18 févr. 2005 à 17:25
bonne journée a +
18 févr. 2005 à 16:30
Et l'auteur du source non plus, il l'a pas fait, na !
Non mais... ;)
18 févr. 2005 à 16:11
Voici ma version, qui n'apporte rien de plus que la tienne, mais qui utilise une spécificité de Delphi (je crois ?), les ensembles énumérés :
function IsNumeric(Src: String): Bool;
var B: Integer;
begin
Result := False;
if (Src = '') or (not (Src[1] in ['-', '0'..'9'])) then Exit;
for B := 2 to Length(Src) do
if not (Src[B] in ['0'..'9']) then Exit;
Result := True;
end;
18 févr. 2005 à 10:57
function IsNumeric(src: string): bool;
const Num = '0123456789';
var B: integer;
begin
Result := false;
if length(src) > 0 then begin
RESULT :(src[1] '-') or (pos(src[1], num) <> 0);
for B := 2 to length(src) do
begin
if pos(src[B], num) = 0 then
Result := false;
Exit;
end;
end;
end;
18 févr. 2005 à 10:55
Des fois c' est tellement gros qu' on voit pas !
Mais tu as tord d' inicialiser RESULT à True Japee: imagine que la chaine est vide !
function IsNumeric(src: string): bool;
const Num = '0123456789';
var B: integer;
begin
Result := false;
if length(src) > 0 then begin
RESULT :(src[1] '-') or (pos(src[1], num) <> 0);
for B := 2 to length(src) do
begin
if pos(src[1], num) = 0 then
Result := false;
Exit;
end;
end;
end;
17 févr. 2005 à 22:27
"for B := 1 to Length(src) do..."
bien sûr, mes doigts ont dérapé !
17 févr. 2005 à 22:25
Genre : '123456789OK'
Non, il faut envisager une approche complètement différente, où tu ne fais pas une boucle par rapport à '0123456789', mais par rapport à la longueur de la chaîne à tester :
for B := 1 to Length(b) do...
Bonne continuation ;)
17 févr. 2005 à 22:17
Personne ne l'a testée ou quoi, cette fonction ?
Et alors, sosodef88, toi non plus on dirait !
Ca ne peut pas fonctionner, le résultat sera toujours false si chaîne à tester < 10.
Par exemple : '581' donne False,
et Length(String) > que 10 : '1345674488KO' donne True !!!
Explications :
Si la longueur du string est inférieure à 10, ça va continuer à "boucler" et forcément, pos = 0 donc Result := False, CQFD.
Au contraire, si length du string >= 10, ça va s'arrêter à B := 10 et Result := True, forcément.
Un dépannage :
function IsNumeric(src: string): bool;
const Num = '0123456789';
var B: integer;
begin
Result := true;
for B := 1 to 10 do
begin
if pos(copy(src, B, 1), num) = 0 then
Result := false;
Exit;
end;
end;
mais l'approche ne me plait pas trop...
17 févr. 2005 à 15:07
17 févr. 2005 à 15:04
Faudrait inicialiser ta fonction à False. Ok?
Malheureusement, ta fonction ne détecte pas non plus le signe moins alors que -5 est bien une valeur numerique !
Appelle ta fonction IsWord et voilà!
17 févr. 2005 à 13:09
Oui effectivement ça fait un peu bricoler, mais comme là où je suis ils ne veulent pas de try/except.... allez savoir
++
Moustachu
17 févr. 2005 à 13:03
moustachu >> Ce code me parait un peu bricolé... ;)
Je reste à StrToFloat :P
17 févr. 2005 à 12:59
Function IsNumeric(p_varIn: Variant) : Boolean;
var
intCode: Integer;
extValue: Extended;
begin
// Si le variant est de type String
if VarIsStr(p_varin) then
begin
// Test si peut correspondre à Extended
val(p_varIn, extValue, intCode);
// Si code=0 -> p_varIn est "extended"
Result :(intCode 0);
end else begin
// Test Si variant est numérique
result := VarIsNumeric(p_varin);
end;
end;
Ca te permet de savoir si ton nombre est numérique (dont nombre à virgule).
++
Moustachu
17 févr. 2005 à 12:59
Mais les grands esprits se rencontre a ce que je vois lol.
17 févr. 2005 à 12:57
Attention La fonction ISNumeric existe deja par défaut sous delphi :
Unit: IdGlobal
Determines if a character is a numeric digit.
function IsNumeric(c: char): Boolean;
Parameters
c: char
Character to be examined.
Returns
Boolean - True if the character is a numeric digit.
Description
IsNumeric is a Boolean function that indicates if the character in c contains a numeric digit in the range '0'..'9'.
Sinon moi je ferrais ceci :
function IsInteger(src:string):bool;
begin
Result := True;
Try
StrToInt(Src);
Except
Result := False;
end;
end;
++,
JMP77.
17 févr. 2005 à 12:39
function IsNumeric(scr:string):Boolean;
begin
result := true;
try
StrToFloat(scr); // utilisation de Float pour la détection de nombres à virgule ;)
except
result := false
end;
end;
Malgré tout, ta fonction a l'avantage de pouvoir être utilisée dans l'EDI malgré le compilateur. En effet, ce que je te propose ne marche qu'en dehors de l'EDI, dans un prog déjà compilé, sans les alertes du compilateur dues à except :P
Conseil : ce serait bien que tu rajoutes la détection de la virgule dans ta chaîne de caractères pour permettre de faire des tests avec des extended :)
@+
Nico