Préambule :
Il se sagit pas ici de parler du chouchen, boisson au demeurant pas désagréable quand elle est consommée un peu fraiche et qui n'en reste pas moins traître, mais de choses plus sérieuses !
La fonction que je vous soumets permet de découper une chaîne de caractères (String) en sous-chaînes, celles-ci étant séparées dans la chaîne initiale par un caractère quelconque. Ces sous-chaînes peuvent être les mots d'une phrase (séparateur = espace), les champs d'un enregistrement séparés par ',' ou par ';' (format CSV d'Excel) ou ...
L'appel à la fonction se fait en transmettant la chaîne, le caractère séparateur, le nombre de sous-chaines maximum à lire.
Le résultat de la fonction est un Tableau de chaînes, redimensionné dynamiquement par la fonction, le nombre de sous-chaînes lues est retourné dans une variable.
Vive le chouchen, et vive DelphiFr
Ken@vo
Source / Exemple :
type
TabString = Array of string ;
function Decoupe(s : string; Car : Char; nb : Integer; var lu : Integer) : TabString;
var
i, idx : Integer;
begin
// Index à zéro
idx :=0;
// i initialisé (pas à zéro !)
i :=99;
// Dimensionnement du tableau résultat
SetLength(Result,nb);
// Jusqu'au nb premières sous-chaines ou fin de la chaine
while (idx<nb) and (i>0) do
begin
i:=pos(Car,s); // Où est le caractère séparateur ?
if i=0 then
begin // Y en a plus (ou pas)
Result[Idx]:=s; // toute la chaine
inc(idx); // incrément index
end
else
begin // Séparateur trouvé
Result[idx]:=copy(s,1,i-1); // Copie de la sous-chaine
inc(idx); // incrément index
delete(s,1,i); // Réduction de la chaine
while (length(s)>0) and (s[i]=Car) do
delete(s,1,1); // tant qu'il y en a
end;
end;
lu:=idx; // Nombre de sous-chaines dans le tableau résultat
end;
var
s : string;
i : integer;
Mots : TabString;
begin
s := 'L''abus de chouchen pendant la programmation est vivement déconseillé';
Mots := Decoupe(s,' ',5,i);
// i = 5
// Mots[0] = 'L'abus'
// Mots[1] = 'de'
// ...
// Mots[4] = 'la'
Mots := Decoupe(Mots[0],'''',5,i);
// i = 2
// Mots[0] = 'L'
// Mots[1] = 'abus'
end;
Conclusion :
D'accord, il doit y avoir mieux comme exemple, mais c'est un exemple !
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.