Sous-chaines

Contenu du snippet

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 !

A voir également

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.