UN AUTRE SPLIT CELUI CI ACCEPTE PLUSIEURS CHAR PAR EX &BREAK
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 2006
-
2 mai 2002 à 14:33
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021
-
23 juin 2005 à 17:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 23 juin 2005 à 17:12
DeAtHCrAsh,
Tu a raison, en fait j'avais repris le TmonArray d'un de mes source qui au départ est un tableau de pchar que je gére dynamiquement, j'aurais du l'effacer au copier/coller, méa culpa !
il faut donc lire : Type Tmonarray = array of string;
Bon Coding...
ManChesTer.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 23 juin 2005 à 15:04
Ne jamais utilisé le mnemonic "packed" pour des chaines de caracteres.
Non seuleument ca ralenti l'accès aux données mais en plus il risque d'y avoir des incompatibilités.
Shell
entity666
Messages postés13Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 novembre 2007 22 oct. 2004 à 17:56
function split(texte:string;spchar:string;start : integer):string;
var
i : integer;
begin
if start<>0 then
begin
for i := 0 to start - 1 do
begin
delete(texte,1,pos(spchar,texte)+length(spchar)-1);
end;
end;
delete(texte,pos(spchar,texte),length(texte));
result:=texte;
end;
ps : y avait encore un tit bug qui est corrigé ici ;)
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 21 oct. 2004 à 17:16
lol, tu veux + cool encore :
type Tmonarray = packed array of string;
Function Split( separateur,chaine : string):Tmonarray;
begin
while pos(Separateur,chaine)>0 do
begin
SetLength(result,Length(result)+1);
result[Length(result)-1]:=copy(chaine,1,pos(Separateur,chaine)-1);
delete(chaine,1,pos(Separateur,chaine)+length(separateur)-1);
end;
if length(chaine)>0 then
begin
SetLength(result,Length(result)+1);
result[Length(result)-1]:=chaine;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var arra : Tmonarray;
j : Integer;
begin
arra:=split("&:','Argument 1&:Argument 2&:Le 3eme&:heuu 4&:bein 5&:le 6eme&:le 7eme et fin');
for j:=0 to length(arra)-1 do
memo1.Lines.Add('Array['+inttostr(j)+']:='''+arra[j]+''';');
setlength(arra,0);
end;
Bon Coding...
ManChesTer.
entity666
Messages postés13Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 novembre 2007 21 oct. 2004 à 01:42
et voila !!!!!!!!!!!!!
function split(texte:string;spchar:string;start : integer):string;
var
i : integer;
begin
if start<>0 then
begin
for i := 0 to start - 1 do
begin
delete(texte,1,start);
delete(texte,1,pos(spchar,texte)+length(spchar)-1);
end;
end;
delete(texte,pos(spchar,texte),length(texte));
result:=texte;
end;
cette fois elle marche réellement et elle est dynamique :)
aussi simple que ça à utiliser :
split(texte,chaine de decoupe,bloc recupéré);
exemple :
split('hehe&breakhaha&breakoueeee','&break',2);
donnera :
oueeee
entity666
Messages postés13Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 novembre 2007 21 oct. 2004 à 01:32
Alors euh plusieurs choses lol
premierement je vois pas trop à quoi te servent les variables "p" puisque tu leur attribues une valeur mais les utilise jamais dans ton code ...
deuxiemement euh en fait tu geres ça avec un "if then else" et donc forcement en cas de multiple passages necessaires (exemple si tu veux la 3 eme decoupe ) bah tu auras toujours la seconde value ...
exemple tu veux couper :
parce que ton if then else est rigide pas dynamique il gere juste 0 ou <> 0 donc que ce soit 2 , 3 ou 4 il le fait de la meme maniere :) je vais corriger ton code et le reposter ici en commentaire mais bon c'est vachement buggé ton truc ;)
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 3 mai 2002 à 02:05
Merci Mono40, (je l'avais pas testèe, juste ecerite en ligne)
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 2 mai 2002 à 14:33
Pour que ta fonction fonctionne correctement il faut écrire :
delete(texte,1,pos(spchar,texte)+length(spchar)-1);
Sinon tu supprime un caractère de trop.
23 juin 2005 à 17:12
Tu a raison, en fait j'avais repris le TmonArray d'un de mes source qui au départ est un tableau de pchar que je gére dynamiquement, j'aurais du l'effacer au copier/coller, méa culpa !
il faut donc lire : Type Tmonarray = array of string;
Bon Coding...
ManChesTer.
23 juin 2005 à 15:04
Non seuleument ca ralenti l'accès aux données mais en plus il risque d'y avoir des incompatibilités.
Shell
22 oct. 2004 à 17:56
var
i : integer;
begin
if start<>0 then
begin
for i := 0 to start - 1 do
begin
delete(texte,1,pos(spchar,texte)+length(spchar)-1);
end;
end;
delete(texte,pos(spchar,texte),length(texte));
result:=texte;
end;
ps : y avait encore un tit bug qui est corrigé ici ;)
21 oct. 2004 à 17:16
type Tmonarray = packed array of string;
Function Split( separateur,chaine : string):Tmonarray;
begin
while pos(Separateur,chaine)>0 do
begin
SetLength(result,Length(result)+1);
result[Length(result)-1]:=copy(chaine,1,pos(Separateur,chaine)-1);
delete(chaine,1,pos(Separateur,chaine)+length(separateur)-1);
end;
if length(chaine)>0 then
begin
SetLength(result,Length(result)+1);
result[Length(result)-1]:=chaine;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var arra : Tmonarray;
j : Integer;
begin
arra:=split("&:','Argument 1&:Argument 2&:Le 3eme&:heuu 4&:bein 5&:le 6eme&:le 7eme et fin');
for j:=0 to length(arra)-1 do
memo1.Lines.Add('Array['+inttostr(j)+']:='''+arra[j]+''';');
setlength(arra,0);
end;
Bon Coding...
ManChesTer.
21 oct. 2004 à 01:42
function split(texte:string;spchar:string;start : integer):string;
var
i : integer;
begin
if start<>0 then
begin
for i := 0 to start - 1 do
begin
delete(texte,1,start);
delete(texte,1,pos(spchar,texte)+length(spchar)-1);
end;
end;
delete(texte,pos(spchar,texte),length(texte));
result:=texte;
end;
cette fois elle marche réellement et elle est dynamique :)
aussi simple que ça à utiliser :
split(texte,chaine de decoupe,bloc recupéré);
exemple :
split('hehe&breakhaha&breakoueeee','&break',2);
donnera :
oueeee
21 oct. 2004 à 01:32
premierement je vois pas trop à quoi te servent les variables "p" puisque tu leur attribues une valeur mais les utilise jamais dans ton code ...
deuxiemement euh en fait tu geres ça avec un "if then else" et donc forcement en cas de multiple passages necessaires (exemple si tu veux la 3 eme decoupe ) bah tu auras toujours la seconde value ...
exemple tu veux couper :
bonjour&breakhehe&breakhaha&breaklooooool&breakmdr
si tu fais :
split('bonjour&breakhehe&breakhaha&breaklooooool&breakmdr','&break',0);
// oué ton deuxieme integer ne sert à rien dans ta fonction en fait
tu auras :
bonjour
si tu fais :
split('bonjour&breakhehe&breakhaha&breaklooooool&breakmdr','&break',1);
tu auras :
hehe
mais si tu fais (et c'est là qu'est l'erreur) :
split('bonjour&breakhehe&breakhaha&breaklooooool&breakmdr','&break',2);
tu auras toujours :
hehe
parce que ton if then else est rigide pas dynamique il gere juste 0 ou <> 0 donc que ce soit 2 , 3 ou 4 il le fait de la meme maniere :) je vais corriger ton code et le reposter ici en commentaire mais bon c'est vachement buggé ton truc ;)
3 mai 2002 à 02:05
2 mai 2002 à 14:33
delete(texte,1,pos(spchar,texte)+length(spchar)-1);
Sinon tu supprime un caractère de trop.