![]() |
PosEx
Hi,
ich hab eine Frage zu PosEx und zwar wie kann ich direkt an das letzte ";" springen? Beispiel
Delphi-Quellcode:
Gut nun könnte ich Pos für Pos alles durch gehen, aber wenn ich gar nicht weiß wieviel ";" im Text sind, wie kann ich dann zum letzten oder z.B vorletzen ";" springen?
s := 'Hallo; Guten Tag; Guten Morgen; Guten Abend;';
Pos1 := Pos(';', s); if Pos1 <> 0 then // erstes Semikolon gefunden begin // Position des zweiten Semikolons ermitteln; // dazu fangen wir gleich nach dem ersten Semikolon an zu suchen: Pos2 := PosEx(';', s, Pos1 + 1); if Pos2 <> 0 then ShowMessage('gefunden an Position: ' + IntToStr(Pos2)) else ShowMessage('nur ein Semikolon im String vorhanden'); end else begin ShowMessage('kein Semikolon im String vorhanden'); end; |
AW: PosEx
Indem du rekursiv durchsuchst ( letztes Vorkommen). Das Vorletzte bekommst du nur durch Speichern der Zustände oder durch einen 2. Lauf
|
AW: PosEx
Durch speichern der Zustände, wie meinst du das?
|
AW: PosEx
.. oder den String manuel von hinten nach dem ';' durchsuchst.
Grüße Klaus |
AW: PosEx
Das heißt, dass Du Dir merken sollst, wo das vorletzte Vorkommen war. Da Du nicht weißt, wann Du beim letzten bist, musst Du halt zwischenspeichern. Aber IMHO wäre Dein Vorhaben mit einer Schleife einfacher zu handhaben, die den String von hinten nach von durchgeht und zeichenweise vergleicht.
[edit] Wo war der rote Kasten? [/edit] |
AW: PosEx
Delphi-Quellcode:
So oder hab ich da einen Denkfehler drin?
Pos1 := 1;
while Pos1 <> 0 do Begin Pos1 := PosEx('<td align="center">', SubStr, Pos1 + 1); if Pos1 <> 0 then // erstes Semikolon gefunden Count:= Count + 1 End; |
AW: PosEx
So solltest Du eine Endlosschleife erhalten, da Du immer wieder von Pos1 ausgehst, diese aber nie verändert wird. Was gefällt Dir denn an der vorgeschlagenen "Rückwärtsschleife" nicht?
|
AW: PosEx
Nur für den Fall das du an die Einträge willst und das PosEx nur eine Idee ist. Es geht auch mit einer Stringlist und als Delimitter das ";", StrictDelimitter auf true. :cyclops:
|
AW: PosEx
Delphi-Quellcode:
Mögliche Fehler sind nicht ausgeschlossen, habe das letzte mal Delphi (intensiv) vor etwa 1 Jahr beutzt:stupid:
for i := length(myString) downto 1 do
begin if myString[i] = ';' then ShowMessage('Das letzte ; befindet sich an der Stelle ' + IntToStr(length(myString)-i)); end; |
AW: PosEx
Zitat:
Delphi-Quellcode:
bzw.
Pos1 := 0;
repeat Pos1 := PosEx('<td align="center">', SubStr, Pos1 + 1); if Pos1 <> 0 then Count:= Count + 1 until Pos1 = 0;
Delphi-Quellcode:
Pos1 := 0;
repeat Pos1 := PosEx('<td align="center">', SubStr, Pos1 + 1); if Pos1 = 0 then break; Count:= Count + 1 until false; // oder Pos1 := 0; while true do begin Pos1 := PosEx('<td align="center">', SubStr, Pos1 + 1); if Pos1 = 0 then break; Count:= Count + 1 end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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