Am Einfachten
CountString, oder ähnliche Funktionen,
Zitat von
Matze:
Pos sucht vom Anfang des Strings an das erste Vorkommen des Suchstrings. Wenn du natürlich manuell den Link von vorne kürzt, kommst du auch mit Pos aus, aber bei PosEx kann man festlegen, ab welcher Stelle gesucht werden soll, was daher viel einfacher ist.
Also wie schon gesagt, Pos such von Anfang an, findet also immer nur das erste Vorkommen, es sei den du entfernst es vorm nächsten Suchdurchgang.
PosEx sucht von da an, wo du es festlegst.
Delphi-Quellcode:
Anz := 0;
i := 1;
While PosEx(Search, S, i) > 0 do Begin
Inc(Anz);
i := PosEx(Search, S, i) + 1;
End;
Anz = Anzahl der Vorkommen mit Überschneidung
// **************
Anz := 0;
i := 1;
While PosEx(Search, S, i) > 0 do Begin
Inc(Anz);
i := PosEx(Search, S, i) + Length(Auto);
End;
Anz = Anzahl der Vorkommen OHNE Überschneidung
// **************
Anz := 0;
While Pos(Search, S) > 0 do Begin
Inc(Anz);
Delete(S, Pos(Search, S), Length(Search));
//Delete(S, Pos(Search, S), 1); << alternativ für die Version mit Überschneidung
End;
// man kann den gefunden String auch gegen etwas ersetzen,
// wo der Suchstring aber nicht drin enthalten sein darf
Anz = Anzahl der Vorkommen OHNE Überschneidung
Delphi-Quellcode:
Search := 'XXX';
S := 'XXX XXXXX XXXX';
erster Code sagt 6
Code:
'XXX XXXXX XXXX'
111 222 555
333 666
444
und Zweiter meint 3 (was CountString entspricht)
Code:
'XXX XXXXX XXXX'
111 222 333
[add]
OK, noch ein Code mit POS für mkinzler
Zitat von
mkinzler:
Ohne PosEx() funktioniert dein Code aber auch nicht.
Hab ich was anderes behauptet?