AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

pos, posex, finden von Text

Ein Thema von theomega · begonnen am 9. Jul 2003 · letzter Beitrag vom 10. Jul 2003
Antwort Antwort
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

pos, posex, finden von Text

  Alt 9. Jul 2003, 19:10
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: pos, posex, finden von Text

  Alt 9. Jul 2003, 19:25
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#3

Re: pos, posex, finden von Text

  Alt 9. Jul 2003, 20:06
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!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: pos, posex, finden von Text

  Alt 9. Jul 2003, 20:11
Zitat von theomega:
ch glaube schon das das geht:
nein, geht nicht, habe mirs noch mal angeschaut.

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 ???
Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: pos, posex, finden von Text

  Alt 9. Jul 2003, 20:23
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#6

Re: pos, posex, finden von Text

  Alt 9. Jul 2003, 20:33
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;
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Benutzerbild von OrallY
OrallY

Registriert seit: 29. Apr 2003
268 Beiträge
 
#7

Re: pos, posex, finden von Text

  Alt 10. Jul 2003, 13:24
Probier einfach mal die Funktion StringReplace aus. Hier ein Beispiel:
Delphi-Quellcode:
output := StringReplace(Input, 'xxx', 'y', rfReplaceAll);
//ersetzt alle vorkommenden xxx mit y
.oO'rallY
Linux is like a tipi: no gates, no windows and a gnu-eating apache inside...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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