Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi pos, posex, finden von Text (https://www.delphipraxis.net/6405-pos-posex-finden-von-text.html)

theomega 9. Jul 2003 20:10


pos, posex, finden von Text
 
Hallo Leute
ich habe in einem String einen Text wie:
Code:
<html>
<body bgcolor="{style[bgcolor]}">

Hallo {name}, wilkommen auf {page}
</body>
</html>
nun möchte ich im nächsten Schritt alle {xxx} durch bestimmte Werte ersetzten. Nur ich scheitere schon vorher:

Delphi-Quellcode:
start := pos('{',s);
while (start>0) do begin;
stop := posex ('}',s,start);
vname:=copy(s,start,stop-start);
showmessage(vname);

start := pos('{',s);
end;
(i s befindet sich der HTML-Code)

eigentlich hatte ich mir das jetzt so vorgestellt, das jede der Variablen (style[bgcolor],name,page) einmal angezeigt werden. Tun sie aber nicht, es kommt bloß dauernd die erste Stelle (style[bgcolor]).
Woran liegt das?

Und noch was: nein, ein TPageProducer hilft nichts, weil es auch mit der Personal laufen soll.

Wer bessere Vorschläge für diesen Vorhaben hat, die schneller sind, bitte posten

Danke und Grüße
TO

Hansa 9. Jul 2003 20:25

Re: pos, posex, finden von Text
 
Hi,

ich reduziere mal den Code:


Code:
start := pos('{',s);
while (start>0) do begin;
...
  start := pos('{',s);
end;
Du setzt immer den Wert auf :

Code:
pos('{',s);
Am Anfang und in der WHILE - Schleife. Das Programm kann nicht so laufen. Es sei denn, { ist in s nicht enthalten.

theomega 9. Jul 2003 21:06

Re: pos, posex, finden von Text
 
ich glaube schon das das geht:
ich speichere jedesmal in start, die position von '{' dann prüfe ich ob es 0 ist (nicht mehr gefunden) und breche dann ab!

Hansa 9. Jul 2003 21:11

Re: pos, posex, finden von Text
 
Zitat:

Zitat von theomega
ch glaube schon das das geht:

nein, geht nicht, habe mirs noch mal angeschaut.

Zitat:

Zitat von theomega
ich speichere jedesmal in start, die position von '{' dann prüfe ich ob es 0 ist (nicht mehr gefunden) und breche dann ab!

Das gibt eine klassische Endlosschleife. Du frägst einen Wert innerhalb der Schleife ab, der sich nie verändert. Und da gehst Du rein, sofern > 0. Raus kommst Du aber nicht mehr.

Wie oft hast Du das Programm schon abgebrochen ???

Christian Seehase 9. Jul 2003 21:23

Re: pos, posex, finden von Text
 
Moin The Omega,

ich kenn' jetzt posex nicht, vermute aber mal, dass es so etwas ähnliches ist, wie

Suchen von Strings im String (incl. Startposition)

bei uns in der CodeLibrary.

Am Besten solltest Du posex auch für Start verwenden, denn pos liefert Dir immer das erste Vorkommen, des gesuchten Strings im durchsuchten String.

Da Du ja aber {style[bgcolor]} wohl nicht ersetzen willst, sondern nur {name} usw. hängt die Schleife, wie Hansa ja schon sagte, an immer der gleichen Start Position.

RomanK 9. Jul 2003 21:33

Re: pos, posex, finden von Text
 
Hoi Dominik, ich hab deinen Code mal nen bissle Modifizert so dass er zumindest bei mir tut:
Delphi-Quellcode:
s := memo1.Lines.Text;
start := pos('{',s);
while (start>0) do
begin
stop := posex ('}',s,start);
vname:=copy(s,start+1,stop-start-1);
showmessage(vname);
zs:=Start+1; // letzte fundstelle von '{' + 1, es würde auch stop gehen.
start := posex('{',s,zs);
end;

OrallY 10. Jul 2003 14:24

Re: pos, posex, finden von Text
 
Probier einfach mal die Funktion StringReplace aus. Hier ein Beispiel:
Delphi-Quellcode:
output := StringReplace(Input, 'xxx', 'y', rfReplaceAll);
//ersetzt alle vorkommenden xxx mit y


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.

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