AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Einträge in Listview / Stringlist vergleichen;Strings zählen
Thema durchsuchen
Ansicht
Themen-Optionen

Einträge in Listview / Stringlist vergleichen;Strings zählen

Ein Thema von frieder2008 · begonnen am 28. Feb 2009 · letzter Beitrag vom 28. Feb 2009
 
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#1

Einträge in Listview / Stringlist vergleichen;Strings zählen

  Alt 28. Feb 2009, 03:38
Hallo zusammen,

es ist inzwischen sehr spät und ich hänge seit Stunden an einem Problem: Ich habe eine Stringlist mit einzelnen Wörtern (Tokens); diese Tokens möchte ich nun - sofern identisch - zählen und in ein Listview ausgeben (Token + Frequenz).

Leider schaffe ich es weder, im Listview ein Item suchen zu lassen, so dass ich bei einem Neueintrag dann einfach die Frequenz erhöhen könnte (+1), noch schaffe ich es, innerhalb der Ausgangs-Stringlist und in Schleifen die doppelten Tokens zu finden, zu löschen und zu zählen.

Folgendes (mit sicherlich inzwischen mehreren Fehlern, die ich auf Grund von Müdigkeit nicht mehr schnalle) habe ich gezimmert:

Wie ihr seht, hab ich sogar irgendwann aus Hilfslosigkeit mit Goto-Verweisungen zu arbeiten versucht; aber nicht einmal das klappt mehr ^^

Delphi-Quellcode:
procedure TForm1.SpeedButton4Click(Sender: TObject);
var
 untgesamt: integer;
 untfrequenz: integer;
 untwort: array of string;
 listitem: tlistitem;
 Textinhalt: Tstringlist;
 tokenlist: TStringlist;
 i,ii,iii: integer;
begin
  if untfilelist.Items.Count=0 then exit;
  //if reffilelist.Items.Count=0 then exit;

  speedbutton1.Enabled:=false;
  speedbutton2.Enabled:=false;

  {Jede Datei öffnen
  Funktion Tokens isolieren
  Tokens kopieren, falls vorhanden, frequenz erhöhen
  Tokens ausgeben}


  Try
  Textinhalt:= Tstringlist.Create;
  tokenlist:= tstringlist.create;

    // UntFileliste abarbeiten
    for i:=0 to untfilelist.Items.Count -1 do begin

      //File einlesen
      textinhalt.LoadFromFile(untfilelist.Items.Strings[i]);

      // Satzzeichen in Leerzeichen umwandeln
      textinhalt.Text:=stringreplace(textinhalt.Text,'.',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,',',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,';',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'!',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'?',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,':',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'-',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'"',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'(',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,')',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'[',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,']',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'<',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,'>',' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,' ', ' ',[rfReplaceAll, rfIgnoreCase]);
      textinhalt.Text:=stringreplace(textinhalt.Text,' ', ' ',[rfReplaceAll, rfIgnoreCase]);

      //Geladenes File in Tokens zerlegen
      untgesamt:= Extractstrings([' '], [','], pchar(textinhalt.text), tokenlist);

      {Zerlegtes File in Array speichern, allerdings nur jedes Token einmal, zugleich zählen; Lösungsansatz: 1) Wort für Wort durchgehen; 2) bei jedem Wort nach gleichen Ausdrücken suchen; 3) wenn gleich, dann Audruck löschen und Zähler=zähler+1; am Ende direkt in die listbox ausgeben!}

      for ii:=0 to tokenlist.Count -1 do begin //Token der Liste durchgehen & ablesen
          untfrequenz := 1;
          //label Schleife;
          for iii:= ii+1 to tokenlist.count -1 do begin //Dasselbe Token in der Liste durchgehen und suchen
              if tokenlist.Names[ii] = tokenlist.names[iii] then begin // wenn gefunden, dann löschen und zählen
                 tokenlist.Delete(iii);
                 untfrequenz:= untfrequenz + 1;
                 //goto Schleife;
                 end
              else begin //wenn keine gleichen Tokens mehr gefunden werden, dann in Listview abspeichern
                   with untwortliste do begin
                     listitem := items.add;
                     listitem.caption:= tokenlist.names[ii];
                     listitem.subitems.add(inttostr(untfrequenz));
              end;
          end;

    //textansicht.Text :=tokenlist.Text //Test


  Finally
  Textinhalt.Free;
  tokenlist.free;
  end;
Zweck des Ganzen: Texte in ihre Tokens/Wörter zergliedern und die Wörter in einer Wortliste samt (Gesamt)Frequenz ausgeben.

Wäre für ein paar Tips, wie ich das lösen könnte, sehr dankbar!

Schönes WE und danke für Eure Mühe,
frieder
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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