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

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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 9 févr. 2006 à 14:12
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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 9 févr. 2006 à 23:37
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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

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


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


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

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

A la revoyure


Peone
Commenter la réponse de cs_Peone
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 9 févr. 2006 à 12:45
-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.