Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String durchsuchen und Wortvorkommen zählen (https://www.delphipraxis.net/37127-string-durchsuchen-und-wortvorkommen-zaehlen.html)

Aike 31. Dez 2004 18:58


String durchsuchen und Wortvorkommen zählen
 
Hallo Leute,

ich habe ein ganz kniffliges Problem *g* Und zwar sieht das wie folgt aus:

In meinem String stehen sehr viele Worte und ich möchte zählen, wie oft ein und das selbe Wort vorkommt, bis das primär gesuchte Wort auftaucht.

Das soll zum Beispiel so aussehen:
String:
"Delphi Delphi Delphi Delphi Forum Delphi Delphi"
Rückgabewert:
"Delphi": 4
"Forum": Existiert

Die primäre Durchsuchung (die auch funktioniert ;)), sieht so aus:

Delphi-Quellcode:
sl := TStringList.Create;

try
  sl.Delimiter := #9;
  sl.Sorted:=True;

  for x:=0 to ListboxGesuchteWorte.Count-1 do
  begin
    sl.DelimitedText := ListboxGesuchteWorte.Items[x];
    sl.Duplicates:=dupIgnore;

    for ndx := 0 to pred (sl.Count) do
    begin
      okay := Pos (sl.Strings[ndx],MeinGrosserString) > 0; // Wort ist vorhanden
      if not (okay) then
        ListboxNichtVorhanden.Items.Add(sl.Strings[ndx])
      else
        ListboxIstVorhanden.Items.Add(sl.Strings[ndx]);
    end;
  end;
finally
  FreeAndNil (sl);
end;
Gegen radikale Umwürfe hab ich nix, der Code stammt auch nicht von mir; ich komme damit kaum zurecht und versuche, mich mit meinen mangelhaften (aber wachsenden *g*) Kenntnissen durchzumogeln ;-)

Hm, also ich hoffe ich hab 's richtig und vollständig erklärt.

Danke für eure Hilfe!

Christian Seehase 31. Dez 2004 19:26

Re: String durchsuchen und Wortvorkommen zählen
 
Moin Aike

welche Delphi Version verwendest Du?

Aike 1. Jan 2005 00:15

Re: String durchsuchen und Wortvorkommen zählen
 
Delphi 7

Christian Seehase 1. Jan 2005 03:18

Re: String durchsuchen und Wortvorkommen zählen
 
Moin Aike,

dann sollte sich das mit PosEx lösen lassen.

Als erstes würde ich mir die Startposition des primären Wortes suchen (pos), und dann solange mit PosEx das sekundäre suchen, solange dessen Startposition kleiner als die des primären ist.

Ein Beispiel:

Delphi-Quellcode:
var
  sSearch   : string;
  iPrimaer  : integer;
  iCount    : integer;
  iSekundaer : integer;

begin
  sSearch   := 'Delphi Delphi Delphi Delphi Praxis Delphi Delphi';
  iPrimaer  := pos('Praxis',sSearch);
  iCount    := 0;
  iSekundaer := pos('Delphi',sSearch);
  while iSekundaer < iPrimaer do begin
    inc(iCount);
    iSekundaer := PosEx('Delphi',sSearch,iSekundaer+1);
  end;
  ShowMessage('Delphi: '+IntToStr(iCount));
end;

Helmi 1. Jan 2005 11:21

Re: String durchsuchen und Wortvorkommen zählen
 
Hallo,

wenn du die Häufigkeit eines Wortes in einem String wissen willst, dann haben die Schweizer einen netten Code dafür:

www.swissdelphicenter.ch/

Wobei es nicht so heissen muss:
Code:
subtext, ',
sondern so:
Code:
subtext, '',

Aike 1. Jan 2005 11:49

Re: String durchsuchen und Wortvorkommen zählen
 
Das Problem an dem Code ist, dass er nicht abbricht, sobald mein gesuchtes Wort auftaucht.

Wie gesagt:
Delphi-Quellcode:
string: 'Delphi Delphi Praxis Delphi'
soll nicht
Delphi: 3x
sondern 2x anzeigen, weil 'Delphi' zwei Mal vor Praxis erscheint.

Und PosEx ist komischerweise ein undefinierter Bezeichner, obwohl ich eine Hilfe dazu aufrufen kann :|
[edit]Yeah, man muss in die UsesList noch den Eintrag "StrUtils" hinzufügen, dann geht 's :???: [/edit]

Ok, anscheinend war es das doch noch nicht. Es funktioniert noch nicht so richtig. Irgendetwas wird falsch durgezählt.
[Eine Stunde später] Ich hab jetzt noch
Delphi-Quellcode:
result:=iCount
eingefügt und es scheint zu funktionieren *freu*

Aike 1. Jan 2005 20:55

Re: String durchsuchen und Wortvorkommen zählen
 
Jetzt habe ich aber noch folgendes Problem; falls das hier im falschen Thread ist müsst ihr 's mir sagen :?

Die gesuchten Worte stehen in der Listbox "ListboxGesuchteWorte". Leider werden bei der Durchsuchung nur ganze Worte verwendet, und wenn ich in der Listbox als einen Eintrag "Delphi Praxis" stehen habe, wird zuerst nach "Delphi" und dann nach "Praxis" gesucht und beides als separater Wert zurückgegeben.
Wenn in dem Text "Delphi ist Praxis" steht, sollte eigentlich ein false und kein true zurückgegeben werden :cry:

Airblader 1. Jan 2005 21:35

Re: String durchsuchen und Wortvorkommen zählen
 
1. Pushen erst nach 24h
2. Neue Frage, neuer Thread

;)

air


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