Ok, hier kommt der Code nochmal kommentiert:
Delphi-Quellcode:
function DoValueList (ZeiKett:
string) : TStringList;
// ****************************************************************************
// Auflösen einer Zeichenkette des Formates "NAME1=WERT1 NAME2=WERT2
// NAME3=WERT3 ......"
// in eine StringList
// ****************************************************************************
// erstellt von Thomas Breitkreuz
// email: [email]tbreitkreuz@breitkreuz-datentechnik.de[/email]
// Codeschnippsel zur Benutzung für Jedermann freigegeben
// ****************************************************************************
var
s :
String;
i : integer;
begin
s := ZeiKett;
Result := TSTringList.Create;
// ausführen, solange NAME=VALUE - Paare vorhanden sind (diese werden wärend
// der Bearbeitung laufend aus der Zeichenkette gelöscht
while pos ('
=', s) > 0
do
begin
i := Length (s);
// vom Ende des Strings an solange zurückgehen, bis ein = Zeichen ohne
// führendes Leerzeichen gefunden wird, es wird davon ausgegangen, daß
// das = Zeichen dem NAME unmittelbar folgt, dadurch können auch
// = Zeichen in den Values vorhanden sein, sofern ein Leerzeichen vorgesetzt
// ist
while (s[i] <> '
=')
or (s [i-1] = '
')
do dec (i);
// nun wird von dem gefundenen = Zeichen aus das nächste Leerzeichen bzw.
// der Anfang der Zeichenkette gesucht, es wird davon ausgegangen, daß
// jedem NAME, der nicht am Anfang der Zeichenkette steht, ein Leerzeichen
// vorausgeht
while ((i > 0)
and (s [i] <> '
') )
do dec (i);
// Jetzt wird das gefundene NAME=VALUE-Paar als ersten Eintrag in die
// Resultliste eingefügt
Result.Insert(0, Trim(copy (s, i+1, Length (s))));
// und dann aus der Zeichenkette gelöscht
delete (s, i +1, Length (s));
// sollte vor dem ersten NAME=VALUE-Paar noch etwas stehen, so wird dies
// hier ausgeschnitten und unter dem NAME "$$$TRAILER$$$" in die Resultliste
// eingefügt
if (i = 0)
and (Length (s) > 0)
then
begin
Result.Insert(0, '
$$$TRAILER$$$=' + Trim (s);
s := '
';
end;
end;
end;
Beim Kommentieren ist mir noch eine Unzulänglichkeit aufgefallen: Die Funktion verharrte in einer Endlosschleife, wenn am Anfang der Zeichenkette ein ' =' vor einem "NAME=" vorkam.
Deshalb habe ich noch den Trailer eingeführt.
Ich hoffe, meine Erklärungen sind ausreichend, ansonsten bitte nachfragen.
btw: Hat einer ne Idee, unter welchem Titel man das in die Codelib stellen könnte?
Gruß
Thomas
[Edit] Delphi-Kommentar korrigiert [/Edit]