Renvoie une partie d'une chaine par rapport à un séparateur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 268 fois - Téléchargée 34 fois

Contenu du snippet

Retourne les tokens se trouvant à la position At dans la chaîne S sans les caractères de contrôle et les espaces se trouvant au début et à la fin.

Source / Exemple :


function TokenAt(const S: string; Seperator: Char; At: Integer): string;
var
  J, I: Integer;
begin
  Result := '';
  J := 1;
  I := 0;
  while (I <= At) and (J <= Length(S)) do
  begin
    if (S[J] = Seperator) then
      Inc(I)
    else if (I = At) then
      Result := Result + S[J];
    Inc(J);
  end;
  Result := Trim(Result);
end;

Conclusion :


Exemple:
s := "aaa;bb;ccc"
si on lance s1 := rgTokenAt(s, ';', 2)
alors s1 = bb

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1721
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
30 août 2020
5
Redirigé ici par ni69 qui répondait à une question posée sur le forum. ;)
On n'a pas fini de l'explorer, notre site préféré !

Dans son exemple, l'auteur a certainement voulu dire :

s := 'aaa;bb;ccc'
si on lance s1 := TokenAt(s, ';', 2)
alors s1 = 'ccc'

... vérifiez !

La fonction proposée dans le commentaire par Emandhal sera plus correcte en remplaçant :

Result := Copy(Str, 1, pos(Substr, Str) -1);

... par :

Result := Trim(Copy(Str, 1, pos(Substr, Str) -1));

si l'on tient compte des espaces éventuels, comme dans le code d'Amadeus.
Messages postés
194
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
10 octobre 2006
2
Function SubString(Str: String ; Substr: String ; n: Integer): String;
var
z: Integer;
begin
Str := Str + Substr;
For z := 1 to n do
begin
Str := copy(Str, pos(Substr, Str)+length(Substr), length(Str)-pos(Substr, Str)+Length(Substr));
end;
Result := copy(Str, 1, pos(Substr, Str)-1);
end;
Ce code là aurait-il pas été plus simple? voir mieux vu que le séparateur peut-être aussi bien un Char qu'une String?
Messages postés
123
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
15 mars 2004
2
Fonction proposé suite à un problème de Manu00

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.