Bonjour,
je cherche la methode ou fonction equivalante a split de vb pour delphi
qui me permet de recuper les donner avant le ; ou :.
ex
nom;prenom; adresse;
lit et inser tableau nom puis prenom puis adrresse et ne tenat pas compte du ;
merci
Bonjour,
je cherche la methode ou fonction equivalante a split de vb pour delphi
qui me permet de recuper les donner avant le ; ou :.
ex
nom;prenom; adresse;
lit et inser tableau nom puis prenom puis adrresse et ne tenat pas compte du ;
merci
Regarde du côté de TStrings/TStringList, Delimiter et DelimitedText.
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
Il y a la FAQ aussi :
http://delphi.developpez.com/faq/?pa...chaine#explode
Bloon
Attention le DelimiterText pose des problèmes avec le #0 considéré comme fait de chaine ou séparateur, je ne sais plus, il élimine les char de #1 à ' ', considère ce dernier comme un séparateur, la fonction de la FAQ est fiable dans de nombre cas, mais elle est lente lorsque l'on a des fichiers de plusieurs Mo à traiter, j'ai donc fait la mienne :
ATTENTION, la Fonction Explode de la FAQ, ou la suivante, ne sont pas faite pour du CSV, il faut gérer pour cela le " et le ; !!!
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 {* ----------------------------------------------------------------------------- la fonction Explode retourne un tableau de chaînes. Ce sont les sous-chaînes, extraites de S, en utilisant le séparateur Separator. @param S Chaine à découper @param A Tableau de Chaine qui recevra la découpe @param Separators Caractères qui délimitent une chaine pour la découpe @param ExcludeEmpty Si True, les Chaines vides ne sont pas insérés dans le Tableau @return Nombre de Séparateur Trouvé (peut-être différent du nombre de chaine dans A !) ------------------------------------------------------------------------------ } function Explode(const S: string; out A: Types.TStringDynArray; const Separators: string; ExcludeEmpty: Boolean = False): Integer; var iLesSep: Integer; function IsSeparator(const C: Char): Integer; begin for Result := 1 to iLesSep do if C = Separators[Result] then Exit; Result := -1; end; var iStr: Integer; iLenS: Integer; iLenSS: Integer; iLenA: Integer; iBegin: Integer; iExclude: Integer; begin iLenS := Length(S); if iLenS = 0 then begin SetLength(A, 1); Result := 0; A[Result] := ''; Exit; end; iLesSep := Length(Separators); iLenA := 0; for iStr := 1 to iLenS do if IsSeparator(S[iStr]) > 0 then Inc(iLenA); if IsSeparator(S[iLenS]) > 0 then Inc(iLenA); SetLength(A, iLenA); iBegin := 1; iLenSS := 0; Result := 0; iExclude := 0; for iStr := 1 to iLenS do begin if IsSeparator(S[iStr]) > 0 then begin if ExcludeEmpty and (iLenSS = 0) then begin iBegin := iStr + 1; Inc(iExclude); end else begin A[Result] := Copy(S, iBegin, iLenSS); Inc(Result); iBegin := iStr + 1; iLenSS := 0; end; end else Inc(iLenSS); end; if Result < iLenA then A[Result] := Copy(S, iBegin, MaxInt); if ExcludeEmpty and (iExclude > 0) then A := Copy(A, 0, iLenA - iExclude); end;
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 {* ----------------------------------------------------------------------------- la fonction ExplodeToStrings encapsule Explode pour renvoyer une liste. @param S Chaine à découper @param A Tableau de Chaine qui recevra la découpe @param Separators Caractères qui délimitent une chaine pour la découpe @param ExcludeEmpty Si True, les Chaines vides ne sont pas insérés dans le Tableau @return Nombre de Séparateur Trouvé (peut-être différent du nombre de chaine dans A !) ------------------------------------------------------------------------------ } function ExplodeToStrings(const S: string; L: TStrings; const Separators: string; ExcludeEmpty: Boolean = False): Integer; var A: Types.TStringDynArray; iL: Integer; begin if Assigned(L) then begin Result := Explode(S, A, Separators, ExcludeEmpty); L.Clear(); L.Capacity := Result; for iL := Low(A) to High(A) do L.Add(A[iL]); end else Result := -1; end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Pourquoi reinventer la roue?
http://www.whitepeaksoftware.com/wps...i_library.aspx
Et voilà un CSV parser en deux coup de cuilleres à compote de pomme
merci de vos reponse je n'ai pas eu encore le tmps de tester j'espere ce WK-end![]()
j'ai lu la faq mais j'ai pas vue le code .
Peche de jeunesse.
merci
Partager