Bonjour,
je cherche une fonction Split pour découper une chaine de caractères selon un délimiteur
merci
Bonjour,
je cherche une fonction Split pour découper une chaine de caractères selon un délimiteur
merci
Yop
Quelque chose comme ça ? :
usage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings); begin Assert(Assigned(Strings)) ; Strings.Clear; Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end;
Fcmd est la TStringList de destination, ledRsyncCmd est le TLabeledEdit dont on va splitter la propriété "text".
Code : Sélectionner tout - Visualiser dans une fenêtre à part Split(' ', ledRsyncCmd.Text, Fcmd);
Bonjour et merci de la réponse.
Oui une procédure de ce genre m’intéresserait, mais cependant je n'ai pas réussi à l'utiliser.
Je voulais le faire dans un programme console sans composants.
Cordialement.
salut
le fait que ce soit une appli console ne veut pas dire que tu ne peut pas utiliser de classe ni de composant
par exemple le TStringList n'est pas un composant visuel et donc dans ton cas peut très bien être utilisé
mais si tu ne veut absolument pas de composant tu peut tres bien utiliser
une boucle et remplir un array of string
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 Type TArrayStr = Array Of string; implementation function SplitString(Text: String,Delimiter : char): TArrayStr; var intIdx: Integer; intIdxOutput: Integer; begin intIdxOutput := 0; SetLength(Result, 1); Result[intIdxOutput] := ''; for intIdx := 1 to Length(Text) do begin if Text[intIdx] = Delimiter then begin intIdxOutput := intIdxOutput + 1; SetLength(Result, Length(Result) + 1); end else Result[intIdxOutput] := Result[intIdxOutput] + Text[intIdx]; end; end;
Bonjour,
Sinon, tu as l'unité StrUtils et les fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Type TSysCharSet = Set of AnsiChar; PSysCharSet = ^TSysCharSet; function WordCount(const S: string; const WordDelims: TSysCharSet): Integer; function WordPosition(const N: Integer; const S: string; const WordDelims: TSysCharSet): Integer; function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;inline; function ExtractWordPos(N: Integer; const S: string; const WordDelims: TSysCharSet; var Pos: Integer): string; function ExtractDelimited(N: Integer; const S: string; const Delims: TSysCharSet): string; function ExtractSubstr(const S: string; var Pos: Integer; const Delims: TSysCharSet): string;
Une des innombrables manières d'implémenter un split:
Str: chaîne à découper
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 NB_FIELDS = 69; // nombre arbitraire de champs type TStringArray = array[0 .. NB_FIELDS] of string;
Sep: Séparateur. Pour la tabulation, utiliser #9
Retourne: Un TStringArray
Exemple d'utilisation:
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 function Split(const Str: string; const Sep: string):TStringArray; var pn : integer; ps : integer; S : string; begin for pn:=0 to High(Result) do Result[pn]:=''; S:=Str; ps:=0; try pn:=0; repeat if pn>High(Result) then Break; ps:=Pos(Sep, S); //s:=Copy(s,0, ps-1); Result[pn]:=Trim(Copy(s,0, ps-1)); Inc(pn); s:=Copy(s, 1+ps, Length(s)); until ps=0; Result[pn-1]:=Trim(s); except end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 EWE := Split('Ta mère en short', ' '); WU := EWE[1]; writeln(WU); // affiche 'mère'
Partager