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 wie oft? (https://www.delphipraxis.net/90169-pos-wie-oft.html)

MrDevil 12. Apr 2007 18:06


Pos wie oft?
 
ich habe hier im Forum schon gesucht was ich fand ahtte immer mit Datein finden zu tun.

Es geht mir aber darum wie oft ich mit POS einen bestimten string suche

for I:= 0 to 100 do

geht ja nicht da ich ja nicht weis WIE oft der string vorkommen kann/tut....

Matze 12. Apr 2007 18:08

Re: Pos wie oft?
 
Du könntest mit einer While-Schleife und Delphi-Referenz durchsuchenPosEx arbeiten, wenn du die Anzahl eines Stingvorkommens ermitteln möchtest. Oder was hast du genau vor?

MrDevil 12. Apr 2007 18:09

Re: Pos wie oft?
 
ja nur in einem Text suchen wie oft das wort zB.: Auto vorkommt

mkinzler 12. Apr 2007 18:32

Re: Pos wie oft?
 
Wie erwähnt PosEx verwenden und aktuelle (Fundstelle +1) als Offset angeben, solange was gefunden wird.

MrDevil 12. Apr 2007 18:42

Re: Pos wie oft?
 
Mein Delphi kennt kein PosEX habe durch google gefunden das man "StrUtils" einbinden soll diese kenn Delphi auch nicht

http://delphi.about.com/library/rtl/blrtlPosEx.htm

Matze 12. Apr 2007 18:45

Re: Pos wie oft?
 
Welche Delphi-Version? Und btw: Teilstring in anderem String suchen/zählen

MrDevil 12. Apr 2007 18:50

Re: Pos wie oft?
 
oah sorrry dachte das es im Profil steht Delphi 5 STD

Nils_13 12. Apr 2007 18:55

Re: Pos wie oft?
 
Irre ich mich? Ich habe in meinen Programmen mit Pos sogar Quellcodes auseinander genommen, wozu PosEx ?

Blackheart 12. Apr 2007 19:09

Re: Pos wie oft?
 
Das war Nix Sorry - vermacht. :wink:

Matze 12. Apr 2007 19:15

Re: Pos wie oft?
 
Zitat:

Zitat von Nils_13
Irre ich mich? Ich habe in meinen Programmen mit Pos sogar Quellcodes auseinander genommen, wozu PosEx ?

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.

mkinzler 12. Apr 2007 19:25

Re: Pos wie oft?
 
Man könnte es auch mit der c-String-Funktion StrScan() versuchen

himitsu 13. Apr 2007 07:02

Re: Pos wie oft?
 
Am Einfachten CountStringCountString, oder ähnliche Funktionen,

Zitat:

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 :angel:

Zitat:

Zitat von mkinzler
Ohne PosEx() funktioniert dein Code aber auch nicht.

Hab ich was anderes behauptet?

mkinzler 13. Apr 2007 07:07

Re: Pos wie oft?
 
@himitsu: Ohne PosEx() funktioniert dein Code aber auch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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