Hallo DPler
und noch ne Klasse hab ich für euch: TDivStrList.
Manche kennen vielleicht die Funktion
explode. Manchmal reicht die aber nicht und zwar genau dann, wenn die einzelnen String-Teile unterschiedlich abgetrennt sind, z.B. bei Parameterauswertungen. Dort können z.B. mehrere Leerzeichen stehen oder auch in Quotes stehende Pfade vorhanden sein. Man braucht also was Flexibleres. Und genau sowas gibts jetzt.
Wie funktioniert das nun?
ganz einfach: Man erzeugt eine Instanz der Klasse TDivStrList und weist der property Str einen Wert zu:
Delphi-Quellcode:
var
DivStrList: TDivStrList;
...
begin
DivStrList := TDivStrList.Create;
DivStrList.ItemChars := ALPHANUM; // erklär ich gleich noch
DivStrList.Str := 'cmd /c explorer.exe "C:\Dokumente und Einstellungen\User\Anwendungsdaten"';
Und schon kann man auf die einzelnen Teile zugreifen und diese auch verändern:
Delphi-Quellcode:
var
i: Integer;
begin
...
for i :=0 to DivStrList.Count -1 do
Memo1.Lines.Add(DivStrList.Items[i]);
DivStrList.Items[1] := 'k';
Memo1.Lines.Add(DivStrList.Str); // Str wäre jetzt 'cmd /k explorer.exe "C:\Dokumente und Einstellungen\User\Anwendungsdaten"'
Ändert sich Str oder ItemStr, so wird das jeweils andere angepasst.
Was hat es jetzt mit den ItemChars auf sich?
Irgendwie muss man ja auch einstellen können, wo die einzelnen Items getrennt werden sollen und ganau das kann man damit. Standardmäßig funktioniert das so:
DivStrList.ItemChars := [#33..#255] - [';'];
Die Zeichen #0 bis #32 lassen wir gleich mal ganz außen vor. Die haben entweder in nem Text nix verloren oder sollen soweiso trennen(#13#10). #33 bis #255 kommen schon mal in die engere Wahl.
Da nehmen wir jetzt alle Zeichen raus, die die einzelnen Items trennen sollen. In diesem Fall wäre das nur das Semikolon. Mit dieser Einstellung entspricht das Verhalten in etwa dem von Explode.
Zur Vereinfachung sind auch schon mal 2 Konstanten definiert:
Delphi-Quellcode:
const
ALPHANUM = ['a'..'z', 'A'..'Z', '0'..'9', 'ß', 'ö', 'ü', 'ä', 'Ö', 'Ü', 'Ä'];
ALPHANUM_EX = [#33..#255] - ['"', '''', '%', '/', '\', '.', '+', '-', ';', ',', ' '];
Bemerkungen:
- QuoteChars bezeichnet die Chars, die einen "Klammereffekt" hervorrufen(d.h. alle Eingeklammerten Zeichen gehören zu einem Item); default ist ['"', ''''], also einfache und doppelte Hochkomma
- objlist_tmpl.pas und
jedi.inc werden benötigt(siehe hierzu diesen
Thread)
Danke:
Dank gebührt u.a.:
- alcaeus für die objlist_tmpl.pas
- Thomas Mueller für den Artikel
Object Pascal Templates
- allen anderen, die sich angesprochen fühlen...
//Nachtrag:
Datei angehängt...
rfc
Christian
[edit=Chakotay1308]URL-Tags korrigiert. Mfg, Chakotay1308[/edit]