Der er mange gange, hvor du skal dele en snor ind i en matrix af strenge ved hjælp af et tegn som separator. For eksempel kan en CSV-fil ("komma" separeret) muligvis have en linje som "Zarko; Gajic;; DelphiGuide ", og du vil have, at denne linje skal parses i 4 linjer (strenge)" Zarko "," Gajic "," "(tom streng) og" DelphiGuide "ved hjælp af semikolon-tegnet"; "som en afgrænser.
Delphi giver flere metoder til at analysere en streng, men du kan opdage, at ingen af dem gør nøjagtigt, hvad du har brug for. F.eks. Bruger ExtractStrings RTL-metoden altid citationstegn (enkelt eller dobbelt) til afgrænsere. En anden tilgang er at brugeafgrænsningstegn ogDelimitedText egenskaber for TStrings-klassen - men desværre er der en fejl i implementeringen ("inde" i Delphi), hvor rumtegnet altid bruges som en afgrænser.
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ParseDelimited (const sl: TStrings; const-værdi: streng; const delimiter: string);
Var
dx: heltal;
ns: streng;
txt: streng;
delta: heltal;
begynde
delta: = længde (afgrænser);
txt: = værdi + afgrænser;
sl. BeginUpdate;
sl. Klar;
prøve
mens længde (txt)> 0 gør
begynde
dx: = Pos (afgrænser, txt);
ns: = Kopi (txt, 0, dx-1);
sl. Tilføj (ns);
txt: = Copy (txt, dx + delta, MaxInt);
ende;
endelig
sl. EndUpdate;
ende;
ende;
~~~~~~~~~~~~~~~~~~~~~~~~~
Brug (udfylder Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide', '')