AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Delphi Strings aufteilen - TDivStrList
Thema durchsuchen
Ansicht
Themen-Optionen

Strings aufteilen - TDivStrList

Ein Thema von r2c2 · begonnen am 9. Jan 2006
Antwort Antwort
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#1

Strings aufteilen - TDivStrList

  Alt 9. Jan 2006, 18:49
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]
Angehängte Dateien
Dateityp: pas divstrlist_class_207.pas (5,1 KB, 152x aufgerufen)
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz