Découper une chaine de caractères

Résolu
Signaler
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
12 mars 2006
-
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
-
procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings) ;
begin
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := Input;
end;

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

Merci


Peone

15 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,
j'ai refait le teste avec comme chaîne :
Split('\', 'je me suis \ trompé \ et c''est'+#13#10+' \ très bête', ts);

et ça fonctionne également

@+
Cirec
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
ç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és
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Pas de quoi,
part contre tu peux cliquer sur réponse acceptée vu que le problème est règlé. Merci

@+
Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
12 mars 2006

ok merci bcp, je vais checker ca


Peone
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
12 mars 2006

Bon ce n'est pas que je suis de mauvaise foi mais je viens de mettre exactement ton code et ca donne tjs la meme chose.

Je t'ai fait un screenshot, regarde par toi meme, c'est exactement ton code

lol, j'en perd mon latin ...


Peone
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
pas de soucis je te crois, mais dis moi quel version de Delphi tu utilises
ps : l'image ne s'affiche pas chez moi

@+
Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
12 mars 2006

la 7


Peone
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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

@+
Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
12 mars 2006

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;


Peone
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
9 février 2006

bonjour,
je comprends le reotur de chariot mais à quoi ça te sert de le remplacer par le caractère #0 ?
quel est ce caractère ?

Alex.
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
ça permet d'annuler le caractère c'est comme si on l'avais supprimer

@+
Cirec
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
9 février 2006

merci du renseignement :)
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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;

@+
Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
12 mars 2006

Merci c cool de m'avoir file un coup de main

A la revoyure


Peone
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,
j'ai fait le teste et ça fonctionne très bien tel quel :

procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings) ;
begin
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := Input;
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"

@+
Cirec