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.
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;
- Parameter: fText: String;
Der String, der getrennt werden soll.
- Parameter: fSep: Char;
Das Trennzeichen[meta]Separator, Trenner[/meta]. Wenn anhand von neuen Zeilen getrennt werden soll, hier #10 angeben.
- Optionaler Paramter: fTrim: Boolean=false;
Trimmung. Wenn dieser Parameter aktiviert ist, werden die zurückgelieferten Ergebnisse getrimmt, d.h. überflüssige Leerzeichen am Anfang und Ende des Strings werden entfernt.
Dieser Parameter ist standardmäßig auf false gesetzt.
- Optionaler Paramter: fQuotes: Boolean=false;
Wenn dieser Paramter aktiviert ist, wird bei der Trennung auf Anführungszeichen geachtet. Diese Funktion ist besonders zum auswerten von CSV-Dateien gedacht.
Dieser Parameter ist standardmäßig auf false gesetzt.
- Result: TStringList;
Das Ergebnis der Funktion wird in einer TStringList zurückgegeben.
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 Peter Lustig: Code- durch Delphi-Tags ersetzt.
Moderiert von Christian S.: Meta-Tags und - Wörter eingefügt