Entwickler-Ecke

Sonstiges - ...wie kann ich einen String zerteilen?


Moritz M. - Mo 07.06.04 20:11
Titel: ...wie kann ich einen String zerteilen?
Hallo Leute,

ich wollte hier jetzt mal meine Split-Funtkion posten, da doch des öfteren Fragen ala. "Wie trenne[meta]trennen, spalten, aufspalten, teilen, aufteilen, splitten[/meta] ich eine String bei jedem Leerzeichen" oder "Wie trenne ich einen String bei neuen Zeilen" auftreten. Erstmal die Funktion, Erklärung kommt drunter.


Delphi-Quelltext
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:
function Split(fText: String;fSep: Char;fTrim: Boolean=false;fQuotes: Boolean=false):TStringList;
var vI: Integer;
    vBuffer: String;
    vOn: Boolean;
begin
  Result:=TStringList.Create;
  vBuffer:='';
  vOn:=true;
  for vI:=1 to Length(fText) do
  begin
    if (fQuotes and(fText[vI]=fSep)and vOn)or(Not(fQuotes) and (fText[vI]=fSep)) then
    begin
      if fTrim then vBuffer:=Trim(vBuffer);
      if vBuffer[1]=fSep then
        vBuffer:=Copy(vBuffer,2,Length(vBuffer));
      Result.Add(vBuffer);
      vBuffer:='';
    end;
    if fQuotes then
    begin
      if fText[vI]='"' then
      begin
        vOn:=Not(vOn);
        Continue;
      end;
      if (fText[vI]<>fSep)or((fText[vI]=fSep)and(vOn=false)) then
        vBuffer:=vBuffer+fText[vI];
    end else
      if fText[vI]<>fSep then
        vBuffer:=vBuffer+fText[vI];
  end;
  if vBuffer<>'' then
  begin
    if fTrim then vBuffer:=Trim(vBuffer);
    Result.Add(vBuffer);
  end;
end;


function Split(fText: String;fSep: Char;fTrim: Boolean=false;fQuotes: Boolean=false):TStringList;


Beispielaufruf und Ergebnis:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Aufruf:
  Split('"    Wert 1";"Wert 2 mit ;";"Wert 3    "',';',true,true);
Ergebnis (Einzele Werte der TStringList):
  Wert 1
  Wert 2 mit ;
  Wert 3

Aufruf 2:
  Split('"    Wert 1";"Wert 2 mit ;";"Wert 3    "',';',false,true);
Ergebnis (Einzele Werte der TStringList):
      Wert 1
  Wert 2 mit ;
  Wert 3    

Aufruf 3:
  Split('"    Wert 1";"Wert 2 mit ;";"Wert 3    "',';',false,false);
Ergebnis (Einzele Werte der TStringList):
  "    Wert 1"
  "Wert 2 mit 
  "
  "Wert 3


Ich hoffe damit sind einige Fragen geklärt. Falls nicht könnt ihr mir gerne eine PN schreiben.

Gruß


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconChristian S.: Meta-Tags und - Wörter eingefügt