Splitte en streng i en streng list

En funksjon som deler en streng i deler adskilt av en substringand returnerer delene i et dynamisk streng rekke splitte en streng i en streng liste
Følgende funksjoner split en streng i deler adskilt av en delstreng og returnere delene i en streng liste som kan overføres som en tredje parameter, eller laget av funksjonen (og i sistnevnte tilfelle må det frigjøres av den som ringer): grensesnittet bruker klasser; funksjons SplitStrings (konst str: string; const separator: string = ','; Strings: TStrings = null): TStrings; funksjons AnsiSplitStrings (konst str: string; const separator: string = ','; Strings: TStrings = null): TStrings; implementering bruker sysutils; funksjons SplitStrings (konst str: string; konst separator: string; Strings: TStrings): TStrings; //Fyller en streng liste med de delene av "str" ​​adskilt med //"separator". Hvis Nil er passert stedet for en streng liste, //funksjonen skaper en TStringList objekt som må //bli frigjort av den som ringer Var n: integer; p, q, s: PChar; element: string; begynne hvis Strings = null deretter Resultat: = TStringList.Create annet Resultat: = Strings; prøve p: = PChar (str); s: = PChar (separator); n: = Lengde (separator); gjenta q: = strpos (p, s); hvis q = null deretter q: = StrScan (p, # 0); SetString (element, p, q - p); Result.Add (element); p: = q + n; inntil q ^ = # 0; unntatt element: = ''; hvis Strings = null deretter Result.Free; heve; slutt; slutt; funksjons AnsiSplitStrings (konst str: string; konst separator: string; Strings: TStrings): TStrings; //Fyller en streng liste med de delene av "str" ​​adskilt med //"separator". Hvis Nil er passert stedet for en streng liste, //funksjonen skaper en TStringList objekt som må //bli frigjort av den som ringer //ANSI versjon Var n: integer; p, q, s: PChar; element: string; begynne hvis Strings = null deretter Resultat: = TStringList.Create annet Resultat: = Strings; prøve p: = PChar (str); s: = PChar (separator); n: = Lengde (separator); gjenta q: = AnsiStrPos (p, s); hvis q = null deretter q: = AnsiStrScan (p, # 0); SetString (element, p, q - p); Result.Add (element); p: = q + n; inntil q ^ = # 0; unntatt element: = ''; hvis Strings = null deretter Result.Free; heve; slutt; end; Eksempler: prosedyre TForm1.Button1Click (Avsender: TObject); begynne SplitStrings (Edit1.Text, ',', ListBox1.Items); slutt; Prosedyren TForm1.Button2Click (Sender: TObject); Var Deler: TStrings; begynne deler: = null; prøv deler: = SplitStrings (Edit1.Text, ','); ShowMessage (Første del er "'+ Deler [0] +'" '); endelig Parts.Free; slutt; end; Du kan se et eksempel bruker en dynamisk matrise i stedet for en StringList i en egen artikkel
.