Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pos liefert letztes statt erstes Vorkommen! HILFE! (https://www.delphipraxis.net/21591-pos-liefert-letztes-statt-erstes-vorkommen-hilfe.html)

Schubi 5. Mai 2004 08:50


Pos liefert letztes statt erstes Vorkommen! HILFE!
 
Hi!
Ich werds kurz erklären...
Hab nen String wo mehrmals '<quote>' und '</quote>' vorkommt.
Dann mach ich das:
Delphi-Quellcode:
Pos1 := Pos('<quote>',S);
Pos2 := Pos('</quote>',S);
S := Copy(S,Pos1,Pos2);
Text := StringReplace(Text,S,'',[rfIgnoreCase]);
Leider gibt das 2. Pos das letzte Vorkommen von '</quote>' zurück, und nicht das erste, S enthält also dann den kompletten Text vom 1. '<quote>' bis zum allerletzten '</quote>'

Was mach ich falsch?
Habt ihr evtl ne bessere Idee?

alcaeus 5. Mai 2004 08:55

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
Du hast den Copybefehl falsch verwendet. Du musst zuerst den String, dann die Startposition und die Anzahl zu kopierender Zeichen angeben, nicht die Endposition.
Korrekt müsste es also lauten:
Delphi-Quellcode:
S:= Copy(s,Pos1+7,Pos2-(Pos1+7));
[edit]Fehler bei der Länge korrigiert[/edit]

SirThornberry 5. Mai 2004 08:58

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
du hast nen kleinen Denkfehler. Der Fehler liegt hier
Delphi-Quellcode:
S := Copy(S,Pos1,Pos2);
Der dritte parameter gibt die länge an und nicht das ende
Wenn dein Text beispielsweise so aussieht
Code:
Irgendwas davor <quote>Kleiner Test, Bla irgendwas</quote>Irgendwas danach
Dann dann bewirtk dein copy das nicht nur so viel zeischen kopiert werden wie zwischen <quote> und </quote> sondern es werden auch noch die zeichen vor dem ersten quote dazu gezählt..
dein zweiter parameter müsste "Pos2 - Pos1" oder so heißen...

[Edit1]Ich werd alt, war schon wieder zu langsam :cry: [/Edit1]

Schubi 5. Mai 2004 09:06

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
*argh*
AUA! :oops:

10 Zeilen weiter oben steht er sogar richtig im Quellcode. Das sind so die Fehler die man net findet, weil sie zu trivial sind... :roll:

also

S := Copy(S,Pos1,Pos1-Pos2);

DANKE! :mrgreen: :gruebel:

Umso lustiger, dass Copy gerade so viel bis zum allerletzten </quote> zurück gegeben hat. so ein zufall :mrgreen:

alcaeus 5. Mai 2004 09:07

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
Sorry, aber wieder falsch...
Nicht:
S:=Copy(S,Pos1,Pos1-Pos2);
sondern
S:=Copy(S,Pos1,Pos2-Pos1);

Schubi 5. Mai 2004 09:12

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
Ja, klar. Danke. Is schon klar, war doch hier nur so auf die Schnelle reingeschrieben. Ganz so blöd bin ich dann doch nicht :mrgreen: :wall:

roderich 5. Mai 2004 11:12

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
Zitat:

S:=Copy(S,Pos1,Pos2-Pos1);
das kopiert ein Zeichen zuwenig. richtig ist

S:=Copy(S,Pos1,Pos2-Pos1 + 1);

Roderich

Schubi 5. Mai 2004 11:43

Re: Pos liefert letztes statt erstes Vorkommen! HILFE!
 
Zitat:

Zitat von roderich
Zitat:

S:=Copy(S,Pos1,Pos2-Pos1);
das kopiert ein Zeichen zuwenig. richtig ist

S:=Copy(S,Pos1,Pos2-Pos1 + 1);

Roderich

Ich zähl eh noch was dazu, um das quote selber gleich mit zu erwischen


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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-2025 by Thomas Breitkreuz