j'utilise cette procedure pour diviser ma chaine de caractere. Seul probleme, en plus du delimiteur, elle splite la chaine a chaque espace. qu'est ce que je devrait ajouter a ce petit bout de code pour qu'il ne s'occupe plus des espaces
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 9 févr. 2006 à 14:12
ça fonctionne mais j'ai quand même apporté une modification en cas de présence de retour chariot:
procedure Split (const Delimiter: string; Input: string; const Strings: TStrings) ;
var
mot : String;
i,indiceMot : integer;
begin
mot:='';
indiceMot:=1;
for i:=1 to length(Input) do
begin
if (Input[I] = #10) or (Input[I] = #13) Then Input[I] := #0;
if (Input[i]=Delimiter) then
begin
Strings.Add(mot);
indiceMot:=indiceMot+1;
mot:='';
end
else
begin
mot:=mot+Input[i];
end;
end;
Strings.Add(mot);
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 9 févr. 2006 à 13:43
Le problème c'est que je n'ai pas D7 j'ai que D4 et D9
et dans D4 il n'y a pas les propriétés Delimiter et DelimitedText
et dans D9 ça fonctionne
donc si une âme charitable pourrait faire le teste ce serait sympa
cs_Peone
Messages postés16Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention12 mars 2006 9 févr. 2006 à 13:54
j'en ai marre d'essayer de decouvrir l'electricite en ameliorant les bougies, g donc coder ma propre fonction split (qui marche) qu'est-ce que tu en dis?
procedure TForm1.Button1Click(Sender: TObject);
Var ts : TStrings;
procedure Split (const Delimiter: string; Input: string; const Strings: TStrings) ;
var
mot : String;
i,indiceMot : integer;
begin
mot:='';
indiceMot:=1;
for i:=1 to length(Input) do
begin
if (Input[i]=Delimiter) then
begin
Strings.Add(mot);
indiceMot:=indiceMot+1;
mot:='';
end
else
begin
mot:=mot+Input[i];
end;
end;
Strings.Add(mot);
end;
begin
ts := TStringList.Create;
Split('\','\je me suis \ trompé \ et c''est \ très bête',ts);
Memo1.Lines.AddStrings(ts);
ts.free;
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 9 févr. 2006 à 22:53
Salut,
au passage je re-post le même code légèrement optimisé :
Procedure Split(Const Delimiter: String; Input: String; Const Strings:
TStrings);
Var mot : String;
i : integer;
Begin mot := EmptyStr;
For i : = 1 To length(Input) Do Begin If (Input[I] = #10) Or (Input[I] = #13) Then Input[I] := #0;
If (Input[I] = Delimiter) Then Begin Strings.Add(mot);
mot := EmptyStr;
End
Else mot : = mot + Input[I];
End;
Strings.Add(mot);
End;
procedure TForm1.Button3Click(Sender: TObject);
Var ts : TStrings;
begin ts : = TStringList.Create;
Split('\', 'je me suis \ trompé \ et c''est \ très bête', ts);
Memo1.Lines.AddStrings(ts);
ts.free
end;
Le problème doit se situer ailleurs tu as certainement des retours chariots dans la chaîne "Input"