Découper une chaine de caractères [Résolu]

Messages postés
16
Date d'inscription
mercredi 8 février 2006
Dernière intervention
12 mars 2006
- - Dernière réponse : Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 9 févr. 2006 à 23:37
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
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
3
Merci
ç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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
3
Merci
Pas de quoi,
part contre tu peux cliquer sur réponse acceptée vu que le problème est règlé. Merci

@+
Cirec

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Dernière intervention
12 mars 2006
0
Merci
ok merci bcp, je vais checker ca


Peone
Commenter la réponse de cs_Peone
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Dernière intervention
12 mars 2006
0
Merci
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
Commenter la réponse de cs_Peone
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
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
Commenter la réponse de Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Dernière intervention
12 mars 2006
0
Merci
la 7


Peone
Commenter la réponse de cs_Peone
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
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
Commenter la réponse de Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Dernière intervention
12 mars 2006
0
Merci
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
Commenter la réponse de cs_Peone
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
9 février 2006
0
Merci
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.
Commenter la réponse de fdb592
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
ça permet d'annuler le caractère c'est comme si on l'avais supprimer

@+
Cirec
Commenter la réponse de Cirec
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
9 février 2006
0
Merci
merci du renseignement :)
Commenter la réponse de fdb592
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
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
Commenter la réponse de Cirec
Messages postés
16
Date d'inscription
mercredi 8 février 2006
Dernière intervention
12 mars 2006
0
Merci
Merci c cool de m'avoir file un coup de main

A la revoyure


Peone
Commenter la réponse de cs_Peone
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
-2
Merci
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
Commenter la réponse de Cirec

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.