Autor Beitrag
Moritz M.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1672



BeitragVerfasst: Mo 07.06.04 20:11 
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.

ausblenden volle Höhe 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;

  • 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:

ausblenden 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