Thema: Delphi Problem mit Pos/PosEx

Einzelnen Beitrag anzeigen

Benutzerbild von NoGAD
NoGAD

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

AW: Problem mit Pos/PosEx

  Alt 11. Apr 2021, 23:48
Delphi-Quellcode:
    // Pos1 ist die Position des Ersten | in ||data-sort-value="
    Pos1 := Pos('||data-sort-value="', stext,1);
    // Pos1 + 1 ist die Position des Zweiten | in ||data-sort-value="
    // Damit wird Pos2 die Position des gleichen " enthalten, wie Pos1.
    Pos2 := Pos('"', stext, Pos1+1 ); // oder PosEx nutzen, ist aber in meiner Version gleich
    // Es muss aber ab der Position Pos1 + der Länge von ||data-sort-value=" + 1 weitergesucht werden.
    Pos2 := Pos('"', stext, Pos1 + Length(||data-sort-value=") + 1); // sollte funktionieren
Es klappt einfach nicht.


Ich habe nun versucht eure beiden Codes zusammenzufügen, weil ich eigentlich nicht den Text drum herum benötige, sondern den Suchtext aus dem Text entfernen möchte.

Mein eigentlicher Text ist dieser:

https://de.wikipedia.org/w/index.php...edit&section=1

Alles, was in der Textbox auf der Webseite steht, soll umgewandelt werden. Doch vorher möchte ich diese störenden Tags entfernen.

Delphi-Quellcode:
function GetText(var stext: string; SearchTextA, SearchTextB: String; var Dummy_StringList: TStringList): boolean;
var
  Pos1: Integer;
  Pos2: Integer;
  Data: Integer;

  Dummy_String: String;
begin

  try
    while (Length(stext) > 0) and (stext <> SearchTextA) do
    begin
      Pos1 := Pos(SearchTextA, stext, 1);
      Pos2 := Pos(SearchTextB, stext, Pos1 + 1) + Length(SearchTextA);

      Dummy_String := Copy(stext, Pos1, Pos2); // Hier sollte doch nun eigentlich (z.B. data-sort-value="Diplomica" drin stehen. Tut es aber nicht, weil das zweite Suchargument (" bzw. "| nicht gefunden wurde. Der überspringt das einfach.
      Delete(stext,pos1,pos2); // das sollte bitte eigentlich auch funktionieren.. ?
      Dummy_StringList.Add( Dummy_String); // Als Test für mich, wird momentan nur im Debugger geprüft

    end;
  finally
    result := true;
  end;

end;
Mathias
  Mit Zitat antworten Zitat