Bonjour a vous, j'ai un petit problème d'algo.
J'ai fait une fonction CSVtoSTRINGGRID.
Donc elle ouvre le fichier CSV puis chaque ligne de type
est traité dans une fonction EXPLOSE STR. Comme suis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Salut;Bonjour;Au revoir
Or le problème qui je rencontre sont les QUOTE des champs textes qui peuvent contenir des ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 // Les lignes doivent se présenter comme ceci : A;B;C;D;E // => 'A' - 'B' - 'C' - 'D' - 'E' // Maintenant avec ceci ;;;; // => '' - '' - '' - '' - '' // Et avec Rien // => '' // Il renvoi tout de même une ligne vide; procedure ExploseStr(ch : string; var dest : TStringList; sep : string = ';'); var p : integer; begin if not assigned(dest) then dest := TStringList.create; dest.BeginUpdate; dest.Clear; p := pos(sep, ch); while p > 0 do begin dest.Add(copy(ch, 1, p-1)); if p <= length(ch) then ch := copy(ch, p + length(sep), length(ch)); p := pos(sep, ch); end; // J'enleve cette ligne parce que sinon, il ne me renvoit pas le dernier si il est vide comme "A;B;;" //if trim(ch) <> '' then dest.Add(ch); dest.EndUpdate; end;
Avec
Il va me ressortir 4 champs, normal (malheureusement).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Salut;"Ca va ; Oui, non ?";Bonjour
Je me suis donc plus penché sur le Stringlist qui peut géré ce cas avec le QUOTESTR, COMMATEXT et DELIMITEDTEXT
Malheureusement, je n'arrive pas à réécrire ma fonction Explose car je ne traite pas un fichier mais un string. Car j'ai l'impression que c'est seulement avec un loadfromfile du stringlist qu'il active la gestion du QUOTESTR.
Faire un ADD(S : STRING) du Tstringlist n'explose pas ma ligne mais rajoute seulement tout mon champ.
Enfin, vous voyez mon problème.
Donc je me doute que cela doit commencer comme ça, mais je ne sais pas écrire la suite :
J'ai vu que le JEDI a un tstringlist avec un fonction LOADFROMCSV mais je ne veux pas me pencher la dessus car ca reviendrais au même vu que je ne travaille pas à partir d'un fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 procedure ExploseStr(ch : string; var dest : TStringList; sep : string = ';'); var p : integer; begin if not assigned(dest) then dest := TStringList.create; dest.BeginUpdate; dest.Clear; dest.QuoteChar := '"'; dest.CommaText := ';'; dest.DelimitedText := ';'; dest.Add(ch); // <-- Ca c'est faux Mais je trouve pas. dest.EndUpdate; end;
Auriez-vous un idée svp.
Merci
Arrown
Partager