UN AUTRE SPLIT CELUI CI ACCEPTE PLUSIEURS CHAR PAR EX &BREAK

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 2 mai 2002 à 14:33
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 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.

https://codes-sources.commentcamarche.net/source/11893-un-autre-split-celui-ci-accepte-plusieurs-char-par-ex-break

cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 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és 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Derniè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és 13 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 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és 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 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és 13 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 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és 13 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 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 :

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 ;)
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
3 mai 2002 à 02:05
Merci Mono40, (je l'avais pas testèe, juste ecerite en ligne)
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
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.
Rejoignez-nous