Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringReplace für eine Position (https://www.delphipraxis.net/86220-stringreplace-fuer-eine-position.html)

xZise 11. Feb 2007 11:02


StringReplace für eine Position
 
Ich habe z.B. folgenden Text:
Code:
Hallo... Das ist [url=www.google.de]Google[/url] bzw. [url]http://www.google.de[/url]
Nun muss ich das in HTML-Code parsen... Ansich funzt es wunderbar für "statische" Parameter (i, b, u etc) aber in diesem Beispiel, muss ich ja [code]<a href=X>[/url] setzen. Dazu muss ich heraus finden, ob es ein
Code:
[url]
oder
Code:
[url=X]
Tag ist.
Auch das funktioniert (theoretisch).
Nun, möchte ich, dass, wenn er
Code:
[url]
findet, dass er
Code:
<a href=
schreibt. Und wenn er
Code:
[url]
findet, dass er daraus den Text nimmt...
Mein Problem ist jetzt, dass ich ja einfach
Code:
[url]
ersetzen muss... Problem, er soll das
Code:
[url]
an einer bestimmten stelle ersetzen ...

Wenn ihr noch kein Plan habt was ich will: Ich will "StringReplace" ausführen, welches es aber an einer Stelle einmal macht...

PS: Ich hoffe es ist so ungefähr klar :P

mkinzler 11. Feb 2007 11:20

Re: StringReplace für eine Position
 
StringReplace ersetzt doch nur das 1. Vorkommen, wenn man ihm nichts anderes sagt.

Daniel G 11. Feb 2007 11:21

Re: StringReplace für eine Position
 
Und wenn du anstelle von Delphi-Referenz durchsuchenStringReplaceDelphi-Referenz durchsuchencopy und Delphi-Referenz durchsuchenPosEx nutzt? Du könntest dir ja den ganzen String zwischen [url(=http://)][/url] nehmen und dann mit String[n] auf die einzelnen Elemente zugreifen.

bitsetter 11. Feb 2007 11:33

Re: StringReplace für eine Position
 
Wie ist es mit StuffString()?
Delphi-Quellcode:
uses StrUtils;

StuffString();

xZise 11. Feb 2007 11:50

Re: StringReplace für eine Position
 
Also ich habe es jetzt ziemlich komplex gelöst, aber es funktioniert :P
Delphi-Quellcode:
  start := 1;
  found := PosEx('[url', source);
  while found > 0 do
  begin
     buffer := '';
    if source[found + 4] = ']' then // [url]
    begin
       buffer := Copy(source, found + 5, PosEx('[/url]', source, found + 1) - found - 5);
      buffer := '[url=' + buffer + ']' + buffer + '[/url]';
    end else if source[found + 4] = '=' then // [url=
     begin
      intBuffer := PosEx(']', source, found + 5);
      buffer := '[url=' + Copy(source, found + 5, intBuffer - found - 5) + ']' + Copy(source, intBuffer + 1, PosEx('[/url]', source, found) - intBuffer - 1) + '[/url]';
    end;
    if buffer <> '' then
    begin
      source := Copy(source, 1, found - 1) + buffer + Copy(source, found + Length(buffer) - 1, Length(source) - found - Length(buffer) + 2);
    end;

     start := found + 1;
    found := PosEx('[url', source, start);
  end;
[edit]stuffstr würde was nachher in der Zusammensetzroutine bringen[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz