Caractère alphabetique majuscule

Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006 - 18 mai 2006 à 11:48
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 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) ?

Merci beaucoup et bonne journée !

Tank

11 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 mai 2006 à 12:04
Salut,
Fonction UpCase('a') --> A  // pour un caractère

Fonction UpperCase('delphi') --> DELPHI // pour une chaine de caractères

Var c: Char;

If UpCase(c) = 'Z' Then

Voilà

@+
Cirec
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 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' ?
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 14:13
En fait,pour expliquer c'est pour mettre dans un Posex(),je voudrais que le caractère à rechercher sois le premier caractère alphabetique majuscule !
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 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 )

Posex('A jusqu'a Z',string_to_test:string;Offset: Cardinal = i)

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 !

Merci encore !!

Tank
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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" }
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
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;
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 16:53
je vais tester cela dés que j'en ai le temps, cette fonction est très interessante !! merci beaucoup
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 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?
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
18 mai 2006 à 17:22
oui l'offset vas de 1 a Length(S)

c'est un cardinal qui vas de 0 a 4 milliard et quelques vus qu'une chaine peu faire de 2octets  a 4Go ^^

aide delphi >> cardinal, integer, word, longword, smallint, shortint, byte (type entiers)
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
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

A +
Thierry
0
Rejoignez-nous