Un autre split celui ci accepte plusieurs char par ex &break

Contenu du snippet

Split par position, Total ou par Occurence, a vous de choisir...

J'espere que cette mise a jour éclaireras vos lanternes sur les divers splits, il y a encore d'autre mèthodes, mais celles si sont les plus fonctionelles.

Bon Coding...

ManChesTer.

Source / Exemple :


// Split par position
// Split à partir d'une position donnée dans un texet (start),
// Position renvoie la position du dernier carartére du séparateur (&split ici)
// dans Texte, si c'est le dernier
// Le résultat est le texte entre start et le 1er séparateur rencontré
function Split(Texte:string;Separateur:string;Start:integer;var Position:integer):string;
begin
 Delete(Texte,1,Start);
 Position:=Start+Pos(Separateur,Texte)+length(Separateur)-1;
 Delete(Texte,Pos(Separateur,Texte),length(texte));
 Result:=Texte;
end;

// Split Total
// le tableau renvoie toute les parties délimitées.
type Tmonarray = Array of string;

function TotSplit(Texte,Separateur:string):Tmonarray;
begin
while pos(Separateur,Texte)>0 do
begin
 SetLength(result,Length(result)+1);
 result[Length(result)-1]:=copy(Texte,1,pos(Separateur,Texte)-1);
 delete(Texte,1,pos(Separateur,Texte)+length(Separateur)-1);
end;
if length(Texte)>0 then
begin
 SetLength(result,Length(result)+1);
 result[Length(result)-1]:=Texte;
end;
end;

// Split par Occurence
// Split qui retourne comme résultat le texte avant le séparateur n°Occurence.
// si Occurence est plus petit ou plus grand que le nombre de parties de texte,
// la fontcion retourne un texte vide
function OSplit(Texte,Separateur:string;Occurence:Integer):string;
var P1 : integer;
begin
 result:='';
 if Occurence<1 then exit;
 p1:=0;
 while p1<Occurence-1 do
 begin
  delete(Texte,1,pos(Separateur,Texte)+length(Separateur)-1);
  inc(p1);
 end;
 Delete(Texte,Pos(Separateur,Texte),length(texte));
 Result:=Texte;
end;

procedure TForm1.Button1Click(Sender: TObject);
var PosDuTexteApresLeSplit:integer;
Txt : String;
j:Integer;
Arra : Tmonarray;
begin
Memo1.Lines.Clear;
Txt:='Hello&breakButifull&breakWorld';
Memo1.Lines.Add('Texte='+txt);

Memo1.Lines.Add('Split par Position');
PosDuTexteApresLeSplit:=0;
Repeat
 Memo1.Lines.add('Texte pour position ('+Inttostr(PosDuTexteApresLeSplit)+')='+Split(txt,'&break',PosDuTexteApresLeSplit,PosDuTexteApresLeSplit));
until PosDuTexteApresLeSplit=Length(txt);
Memo1.Lines.Add('On sais que c''est le dernier parce que Position='+Inttostr(PosDuTexteApresLeSplit));
Memo1.Lines.Add(' ce qui correnspond à la taille du texte (length(Texte)='+Inttostr(Length(txt))+')');

Memo1.Lines.Add('Split Total');
Arra:=TotSplit(Txt,'&break');
for j:=0 to length(arra)-1 do
memo1.Lines.Add('Tableau['+inttostr(j)+']:='+arra[j]);
setlength(arra,0); //<== ne pas oublier de vider le tableau aprés utilisation

Memo1.Lines.Add('Split par Occurence');

For j:=1 to 4 do
Memo1.Lines.add('Occurence '+inttostr(j)+'='+Osplit(txt,'&break',j));
Memo1.Lines.Add('On sais que c''est le dernier quand le résltat est une chaine vide');
Memo1.Lines.add('Si Occurence étais plus petit que 1, le résultat serais aussi une chaine vide');
end;

Conclusion :


Pour tester :
Juste faire un form,
Mettre un boutton et un mémo.
Dans le OnClick du bouton mettre la procedure "Button1Click"
Lancer,clicker sur le bouton.

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.