Skip navigation.
 

Stringbearbeitung

Delphi

Der Umgang mit Zeichenketten ist eine wichtige Aufgabe. Delphi bringt einige Funktionen mit die zwar sehr flexibel, aber im täglichen Umgang sehr zeitintensiv sind.

Beispiel:
Ich möchte einige Informationen in einer einzigen Zeichenkette unterbringen und mit einem Zeichen separieren. Das zusammensetzen einer solchen Information ist eigentlich ganz einfach. Nehmen wir an, ich möchte mir eine Adresse mit 6 Feldern in einer Zeichenkette ablegen und mit dem Zeichen | trennen. Ich habe mehrere Adressen, deshalb lege ich alles in einer Stringliste ab.

Felder : NAME, STRASSE, PLZ, ORT, TEL, FAX, EMAIL
AdrLst:=TStringlist.create;
AdrLst.Add('Hans Mustermann|Musterweg 9|12345|Musterstadt|(012345) 7788990|(012345) 7788991|hmuster@och.com')
AdrLst.Add('Franz Mustermann|Musterweg 9|12345|Musterstadt|(012345) 7788996|(012345) 7788999|fmuster@och.com')

u.s.w.

Jetzt könntest Du frage, warum mache ich das ganze nicht als Record und speichere das als typisierte Datei ab. Ganz einfach, um mir den Aufwand mit dem Zugriff auf typisierte Dateien zu sparen und ich nicht so viele Datensätze habe, speichere ich alles in eine INI-Datei ab und hole die Daten bei Bedarf aus der INI-Datei in den Speicher (TStringlist).

Ich möchte nun die einzelnen Felder in Editfelder einlesen und bei Bedarf wieder speichern. Dazu muss ich mir noch merken auf welchem Datensatz ich stehe, welches Feld geändert wurde, umsortieren u.s.w. - das spare ich mir aber nun, denn ich wollte nur ein Beispiel dafür bringen, wozu ich Zeichenketten teilen muss. Obwohl ich im Laufe der Zeit eine Reihe von guten Stringbehandlungsroutinen als Freeware gefunden habe, habe ich mir selbst eine function gebastelt, die für diesen Fall geeignet ist:

function ValuestrNr(instr:string;seperator:char;nr:byte):string;
  var tmpcnt:byte;
        tmpout:string;
begin
   tmpcnt:=0;tmpout:='';

    while (pos(seperator,instr)>0) and (tmpcnt<nr) do
     begin
      inc(tmpcnt);
      if tmpcnt=nr then tmpout:=copy(instr,1,pos(seperator,instr)-1);
      delete(instr,1,pos(seperator,instr));
    end;
    if (length (instr)>0) and (tmpcnt+1=nr) then tmpout:=instr;
    ValuestrNr:=tmpout;
end;

Dies ist nur eine function, um einen separierten Teilstring aus einer Zeichenkette zu extrahieren. Eine komplette Sammlung von Stringbehandlungsroutinen sind z.B. in den beliebten RX-Tools (erhältlich auf der Torry's Delphi Page) enthalten. Schaut euch dort die Unit StrUtils an!