Thema: Delphi Problem mit Pos/PosEx

Einzelnen Beitrag anzeigen

Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Problem mit Pos/PosEx

  Alt 12. Apr 2021, 12:22
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
Mathias
  Mit Zitat antworten Zitat