Autor |
Beitrag |
Atreyu
      
Beiträge: 137
Delphi 7 Enterprise
|
Verfasst: Do 29.11.07 12:40
Ich habe die String-Funktionen durchsucht, aber nichts gefunden.
Ich will NICHT die Position von Substring in String finden (das verwende ich schon woanders), sondern WIE OFT ein Substring in String vorkommt.
Ich könnte so eine Funktion leicht selbst schreiben, aber 1) Wieso sollte ich, wenn es so eine geben könnte und 2) wäre meine Variante vermutlich systemferner und daher langsamer.
In anderen Sprachen gabs sowas glaub ich mal.
Wenn einer so eine Func kennt, bitte verraten^^
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 29.11.07 12:42
Soweit ich weiß, gibts die nicht, aber die sollte man wirklich leicht mit Pos und PosEx bauen können  .
_________________ We are, we were and will not be.
|
|
Atreyu 
      
Beiträge: 137
Delphi 7 Enterprise
|
Verfasst: Do 29.11.07 12:49
Ich hätte jetzt einfach ne Schleife gemacht, die den STring Zeciehn für Zeichen durchgeht und einen Counter erhöht, wenn der Substring erkannt wird. Und das bis zum Ende des Strings.
Mit Pos arbeite ich auch. Ich müsste dann eben die erste Pos von Substring in STring festlegen und ebenfalls irgendwie per MidStr(erste Pos) weitersuchen...
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 29.11.07 12:54
Genau dafür gibts ja PosEx - da kann man auch angeben, ab welcher Stelle im String gesucht werden soll
Die Variante, die du vorgeschlagen hast, geht natürlich auch, und dürfte auch ausreichend sein. Wenns wirklich fix gehen soll, und die Texte (und vor allem die gesuchten Teilstrings) etwas länger werden, würde ich eine Variante von Boyer-Moore vorschlagen. Quicksearch ist afaik noch recht einfach zu implementieren.
_________________ We are, we were and will not be.
|
|
Atreyu 
      
Beiträge: 137
Delphi 7 Enterprise
|
Verfasst: Do 29.11.07 12:59
PosEx liefert mir nur irgendeinen Bytewert oder sowas aus. Damit kenn ich mich nicht ganz aus.
Naja, wie lang kann ein Audiofilename sein? "Artist - Album - Nummer - Song.mp3", also nicht allzu lang. Ich muss nur die ' - ' finden.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 29.11.07 13:06
_________________ We are, we were and will not be.
|
|
Atreyu 
      
Beiträge: 137
Delphi 7 Enterprise
|
Verfasst: Do 29.11.07 13:34
Hmm, sieht sehr einfach aus. Wenn ich das als Funktion mit zB Filename als Parameter und Count als Rückgabewert mache, dann sollte der Zweck erfüllt sein.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 29.11.07 13:43
Hier gibts eine entsprechende Funktion, die relativ schnell sein dürfte  :
www.delphipraxis.net/post409954.html
Delphi-Quelltext 1:
| Function CountString(Const SubStr, S: WideString): Word; |
|
|
Atreyu 
      
Beiträge: 137
Delphi 7 Enterprise
|
Verfasst: Do 29.11.07 16:40
Ach du sch.... Okay, Assembler dürfte schnell sein, aber so viel Code will ich gar nicht in mein Source quetschen.
Da nehm ich lieber mal deine Loop.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 29.11.07 16:51
Scheint auch nicht mehr als ne Schleife zu sein. 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|