Balthus14
Messages postés1Date d'inscriptionvendredi 30 mai 2008StatutMembreDernière intervention24 décembre 2010 24 déc. 2010 à 12:10
Vieux post mais si cela peut aider !
voilà ma solution pour éviter la prise en considération du caractère espace par fonction "TSrings.DelimitedText"
Procedure ScinderPerso(S: string; const Delimiteur: char;Strings : TStrings);
begin
if assigned(Strings) then
begin
while Pos(DElimiteur,S)<>0 do
begin
Strings.add(copy(S,1,pred(Pos(Delimiteur,S))));
delete(S,1,Pos(Delimiteur,S));
end;
if S<>'' then Strings.add(S);
end;
end;
crackspider7676
Messages postés9Date d'inscriptionvendredi 9 février 2007StatutMembreDernière intervention28 février 2008 11 févr. 2008 à 10:49
Oui, c'est vrai mais dans mon cas, cela m'arrangeait étant donné que la chaine à splitter contient toujours 10 champs.
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 11 févr. 2008 à 10:33
Déclarer la longueur du tableau limite sérieusement l'intérêt de cette source. Il fallait passer un tableau dynamique en paramètre (type formel).
nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 octobre 2011 1 févr. 2008 à 21:14
Y'a aussi les fonctions Rexx !
crackspider7676
Messages postés9Date d'inscriptionvendredi 9 février 2007StatutMembreDernière intervention28 février 2008 30 janv. 2008 à 01:55
j'avais trouver un code utilisant le type TStringList sur http://delphi.about.com/cs/adptips2002/a/bltip1102_5.htm et dans certains cas j'étais confronté à une erreur.
PS: au bout de 200 split, il y avait parfois un décallage => Bizarre.
Merci quand même!
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 janv. 2008 à 01:54
ou en fonction, toujours avec la classe TStrings / TStringList
function Split(const S: string; const Delimiter: char; Strings: TStrings);
begin
if assigned(Strings) then
begin
Strings.Delimiter := Delimiter;
Strings.DelimitedText := S;
end;
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 janv. 2008 à 01:48
var TSL : TStringList;
begin
TSL := TStringList.Create;
try
TSL.Delimiter := ';';
TSL.DelimitedText := 'test1;;test3;test4;test5;test6;test7;;test9;';
ListBox1.Items.Assign(TSL); // assignation vers une liste par exemple
24 déc. 2010 à 12:10
voilà ma solution pour éviter la prise en considération du caractère espace par fonction "TSrings.DelimitedText"
Procedure ScinderPerso(S: string; const Delimiteur: char;Strings : TStrings);
begin
if assigned(Strings) then
begin
while Pos(DElimiteur,S)<>0 do
begin
Strings.add(copy(S,1,pred(Pos(Delimiteur,S))));
delete(S,1,Pos(Delimiteur,S));
end;
if S<>'' then Strings.add(S);
end;
end;
11 févr. 2008 à 10:49
11 févr. 2008 à 10:33
1 févr. 2008 à 21:14
30 janv. 2008 à 01:55
PS: au bout de 200 split, il y avait parfois un décallage => Bizarre.
Merci quand même!
30 janv. 2008 à 01:54
function Split(const S: string; const Delimiter: char; Strings: TStrings);
begin
if assigned(Strings) then
begin
Strings.Delimiter := Delimiter;
Strings.DelimitedText := S;
end;
end;
30 janv. 2008 à 01:48
begin
TSL := TStringList.Create;
try
TSL.Delimiter := ';';
TSL.DelimitedText := 'test1;;test3;test4;test5;test6;test7;;test9;';
ListBox1.Items.Assign(TSL); // assignation vers une liste par exemple
finally
TSL.Free;
end;
end;