Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 novembre 2006
-
18 mai 2006 à 11:48
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
18 mai 2006 à 17:47
Bonjour,
Je voulais savoir comment exprimé en delphi un caractère en Alphabetique Masjuscule ( afin de faire un teste dans IF) ?
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 novembre 2006 18 mai 2006 à 14:06
Et si ma lettre que je veux tester peur etre n'importe qu'elle lettre de l'alphabet ( A,B,C ou D, OU......, Z) commment le tester ? N'ai-je pas d'autre choix que de faire un If UpCase(c)='Z' ou 'A' ou 'B' ?
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 18 mai 2006 à 14:50
Salut,
si j'ai bien compris ce que tu veux, voici une procedure Posex.
Procedure et non function pcq elle renvoie deux valeurs :
P : position du 1° caractère majuscule ou 0 (pas de majuscule dans la chaine)
C: lettre majuscule ou #0 si pas de majuscule
procedure Posex(s: string; var P: integer; var C: char);
var
i: integer;
begin
P:= 0;
C:= #0;
for i:= 1 to Length(s) do
if s[i] in ['A'..'Z'] then
begin
P:= i;
C:= s[i];
Break; // sortie de la boucle
end;
end;
A +
Thierry
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 novembre 2006 18 mai 2006 à 15:33
mais delphi accepte il de comprendre que le caractère recherché serais de AàZ en majuscule, et cela, passé directement en paramètre de la fonction Posex ( sachant que je ne peux passer que des string en paramètre à rechercher:s :s je suis perdu :s )
Voila je pense avoir été explicite lol, y a t-il moyen de faire comprendre a delphi "n'importe quelle char de A à Z" sachant que le premier paramètre de la fonction Posex doit etre un string !
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 18 mai 2006 à 15:53
type
TCharSet = set of Char;
function CharSetPos(const CharSet : TCharSet; const S : string; const OffSet : cardinal = 1) : cardinal;
var N : cardinal;
begin
for N := Offset to Length(S) do begin
if S[N] in CharSet then begin
Result := N;
exit;
end;
end;
end;
renvois l'indice d'une lettre appartenant a l'ensemble CharSet.
CharSetPos(['A'..'Z'],'bonjour Monsieur'); { renvois 9, qui est la position de "M" }
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 18 mai 2006 à 16:52
Sorry, je n'avais pas pigé que tu voulais employer la fonction PosEx de Delphi.
Le paramètre Substr de PosEx est de type string, donc il réclame une valeur précise : 'A' ou 'B' ou 'Bonjour'. Donc inutilisable dans ton cas...
Si tu veux scruter ton string_to_test à partir d'une certaine position, emploie la fonction de f0xi qui en plus te permet de rechercher n'importe quel ensemble de caractères.
Petite correction, car la valeur de retour de CharSetPos peut être indéfinie :
function CharSetPos(const CharSet : TCharSet; const S : string; const OffSet : cardinal = 1) : cardinal;
var N : cardinal;
begin
Result:= 0;
for N := Offset to Length(S) do begin
if S[N] in CharSet then begin
Result := N;
Break;
end;
end;
end;
Comme ton Charset est toujours de A à Z : tu pourrais simplifier (mais est-ce utile ?)
function AToZSetPos(const S : string; const OffSet : cardinal = 1) : cardinal;
var N : cardinal;
begin
Result:= 0;
for N := Offset to Length(S) do begin
if S[N] in ['A'..'Z'] then begin
Result := N;
Break;
end;
end;
end;
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 novembre 2006 18 mai 2006 à 17:15
Si j'ai bien compris ThWilliam, en fait, "const OffSet : cardinal" , il faut en fait passer un entier correspondant à l'index à partir duquel on veut commencer la recherche, c'est ca?
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 18 mai 2006 à 17:47
Tu as bien compris.Petite précision : le paramètre Offset a une valeur par défaut 1 (const Offset: cardinal 1)
Donc, tu n'es pas obligé de le préciser pour une recherche commençant au 1° caractère.
P:= AToZSetPos(string_to_test); // recherche à partir du 1° caractère
P:= AToZSetPos(string_to_test , 1); // idem
P:= AToZSetPos(string_to_test, 10); //recherche à partir du 10° caractère