Moin,
ich versuche gerade irgendwie, die ExtractStrings-Funktion (D5) so umzubauen, dass sie keine Sonderstellung für Anführungszeichen vergibt. Heißt: Die Funktion nimmt ", ', Lehrzeichen und Zeilenumbruch als Trennungszeichen; Trennzeichen innerhalb zweier Anführungszeichen werden ignoriert. Bsp.:
String:
Hans sucht Jürgen, und sagt ihm "Du Schweinehund"
Dann ergibt die zurückgegebene Liste (Komma auch als Trnnzeichen definiert).
Hans
sucht
Jürgen
und
sagt
ihm
Du Schweinehund
Ich brauche die Funktion jetzt aber so, dass sie ausnahmslos alle Sonderzeichen (also Nicht-Buchstaben) als Trennzeichen, d.h. Anführungzeichen IMMER als Trennzeichen ohne Sonderregel interpretiert.
Ok, ich hoffe, ich konnte mich verständlich machen. Problem jetzt: ich verstehe die
VCL-Routine nicht bzw. finde nicht den Abschnitt für diese "Ausnahmeregel"..
Funktion aus der
VCL:
Delphi-Quellcode:
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;
Strings: TStrings): Integer;
var
Head, Tail: PChar;
EOS, InQuote: Boolean;
QuoteChar: Char;
Item: string;
begin
Result := 0;
if (Content = nil) or (Content^=#0) or (Strings = nil) then Exit;
Tail := Content;
InQuote := False;
QuoteChar := #0;
Strings.BeginUpdate;
try
repeat
while Tail^ in WhiteSpace + [#13, #10] do Inc(Tail);
Head := Tail;
while True do
begin
while (InQuote and not (Tail^ in ['''', '"', #0])) or
not (Tail^ in Separators + [#0, #13, #10, '''', '"']) do Inc(Tail);
if Tail^ in ['''', '"'] then
begin
if (QuoteChar <> #0) and (QuoteChar = Tail^) then
QuoteChar := #0
else QuoteChar := Tail^;
InQuote := QuoteChar <> #0;
Inc(Tail);
end else Break;
end;
EOS := Tail^ = #0;
if (Head <> Tail) and (Head^ <> #0) then
begin
if Strings <> nil then
begin
SetString(Item, Head, Tail - Head);
Strings.Add(Item);
end;
Inc(Result);
end;
Inc(Tail);
until EOS;
finally
Strings.EndUpdate;
end;
end;
Kann mir jemand einen Hinweis geben?