Der zweite Fehler ist hier:
Dummy_String := Copy(stext, Pos1, Pos2);
[..]
Nun gehst Du her und kopierst genau diesen Teil aus sText. Damit erhälst Du dann SearchTextA + SearchTextB als einen String.
Nur nochmal zur Rekapitulation (ich begreife es einfach nicht).
Pos/PosEx suchen beide nach Vorkommen.
Bei der ersten Suche wird korrekt aus einem Text das erste Vorkommen gefunden. Basis ist hier der Textbeginn.
Bei der zweiten Suche möchte ein Vorkommen gefunden werden, aber erst nach der Position der ersten Suche. Suchbasis ist
NICHT der Textbeginn, sondern die Position der ersten Suche.
Delphi-Quellcode:
var
StringA: String;
Pos1, Pos2: Integer;
Dummy_String: String;
begin
StringA := 'ABCDEFGHJK';
Pos1 := Pos('DE', StringA, 1); // Pos1 ist korrekt VOR der 4. Stelle
Pos2 := Pos('G', StringA, Pos1); // Pos2 ist wie gewünscht VOR der 7. Stelle
Dummy_String := Copy(StringA, Pos1, Pos2); // enthält DEFGHJK; sollte aber eigentlich DEF beinhalten
Pos2 := Pos('G', StringA, Pos1) - Pos1; // Pos2 ist wie gewünscht an Position 7 - 4
Dummy_String := Copy(StringA, Pos1, Pos2); // enthält endlich DEF
showmessage(Dummy_String);
end;
Ich glaube, ich habe es nun doch endlich verstanden. Mein Fehler war immer, dass ich vom Basistext ausgegangen bin, also Pos1 und Pos2 immer vom Anfang des Textes verstanden haben wollte. Im Endeffekt ist es ja auch korrekt so. Die Positionen stimme ja überein, jedoch ist dann
Copy nicht darauf aus, zweimal vom Anfang des Textes zu suchen, sondern nur einmal und im Anschluss nur die Anzahl der zu kopierenden Zeichen. Somit war es ein logischer Fehler meinerseits.
Vielen lieben Dank!
Nach 20 Jahren - es ist eigentlich zum Schämen - habe ich endlich verstanden, warum das nie klappen wollte, wenn ich diese und ähnliche String-Funktionen nutzen wollte.
Liebe Grüße
Mathias