Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Listboxen vergleichen (https://www.delphipraxis.net/112178-listboxen-vergleichen.html)

knolli 16. Apr 2008 11:21


Listboxen vergleichen
 
Hi!

Ich hab mal wieder ein Problem.

Ich sitze zur Zeit an einem Programm, das mir Wörter von Internetseiten holt.
Die Wörter der Seiten ( die in einem Memo sind), werden in eine Listbox eingetragen.
So weit so gut:

Delphi-Quellcode:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~ Text zerlegen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TWortsuche.Textzerlegen(Sender: TObject);
var sWort, sZeile:string;iLauf, iLauf2:integer;
begin
  For iLauf:=0 to Memo_Seitentext.Lines.Count-1 do                 //vom ersten bis letztem eintrag
    Begin
      Application.ProcessMessages;                                 //wurde was geklickt?
      IF NOT bAbbruch then                                         //wenn kein abbruch geklickt wurde dann
      begin                                                        //von HIER
        sZeile:=Memo_Seitentext.Lines[iLauf]+' ';                  //
        For iLauf2:=1 to LENGTH(sZeile) do                         // Wörter
          begin                                                    // der
            sWort:=COPY(sZeile,1,POS(' ',sZeile));                 // Zeile
            sZeile:=COPY(sZeile,POS(' ',sZeile)+1, LENGTH(sZeile)); // trennen
            IF ((LENGTH(sWort)>1)) then                            // und
              Listbox_Seitenwoerter.Items.Add(TRIM(sWort));        // eintragen
        end;//for Length(sZeile)                                   // bis HIER
      end;//if abbruch
  end;//for Memolines                                             //Memoinhalt löschen
  Memo_Seitentext.Clear;
end;
Ich habe noch eine andere Listbox, in der Wörter stehen, die nicht eingetragen werden sollen.
Zu beginn des Programms, weiß ich weder wieviele Wörter in der Wörterlistbox stehen, noch wieviele Wörter in der Sperrlistbox stehen.

Ich habe es bis jetz immer nur so hinbekommen, dass zwar die Wörter(die auch in der Sperrliste stehen) ausgesondert werden, aber die Wörter (die nicht in der Sperrliste stehen) so oft eingetragen werden, wie die Sperrliste einträge hat.


Meine Frage:

Wie kann ich beim Eintragen in die Listbox_Seitenwoerter überprüfen, ob das Wort(das eingetragen werden soll) in der Sperrliste steht, ohne das Wörter (die nicht in der Sperrliste stehen) doppelt bzw vielfach eingetragen werden?

Nuclear-Ping 16. Apr 2008 11:23

Re: Listboxen vergleichen
 
1) Indem du vor jeder Eintragung in die Seitenliste jeden Eintrag aus der Sperrliste durchgehst und prüfst, ob der Eintrag vorkommt?
2) Indem du vor jeder Eintragung in die Seitenliste jeden Eintrag aus der Seitenliste durchgehst und prüfst, ob er schon enthalten ist (zB mit IndexOf)

knolli 16. Apr 2008 14:51

Re: Listboxen vergleichen
 
kannst du mir das mit dem IndexOf vielleicht etwas genauer erklären?

ich hab mal ein demo prg geschrieben, das so aussieht...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
begin
For i:=0 to Listbox1.Items.Count-1 do
for j:=0 to Listbox2.Items.Count-1 do
IF ListBox1.Items.IndexOf(Listbox2.Items[j])=-1 then Memo1.Lines.Add(Listbox1.Items[i]);
end;

end.
ich glaube aber das die bedingung des IndexOf falsch ist...
wenn es so ist dürfte es die Wörter aufschreiben, die nicht drin sind oder?
ich hab damit noch nie gearbeitet... :gruebel:

DeddyH 16. Apr 2008 15:13

Re: Listboxen vergleichen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to Listbox1.Items.Count-1 do
    if ListBox2.Items.IndexOf(Listbox1.Items[i]) < 0 then
      Memo1.Lines.Add(Listbox1.Items[i]);
end;

knolli 16. Apr 2008 17:24

Re: Listboxen vergleichen
 
hättest du vielleicht auch dafür einen kleinen kommentar übrig? :lol:

ich beschreib es nochmal, weil die Lösung noch nicht so richtig passt.

in dem Testprogramm, habe ich ListBox1 und ListBox2

in LB1 stehen willkürliche Wörter
in LB2 stehen auch willkürliche Wörter, nur weniger(das ist meine "Sperrliste")

nun soll geprüft werden, ob in LB1 eas steht, was auch in LB2 steht.
wenn das der falls ist, dann soll das betreffende Wort in das memo geschrieben werden.

Nuclear-Ping 16. Apr 2008 17:27

Re: Listboxen vergleichen
 
Und genau das macht Deddy's Code. :gruebel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  // Gehe LB1 durch ...
  for i:=0 to Listbox1.Items.Count-1 do
    // ... und schaue, ob in LB2 der Eintrag vorhanden ist ...
    if ListBox2.Items.IndexOf(Listbox1.Items[i]) < 0 then
      // ... und schreibe es in Memo1, wenn ja
      Memo1.Lines.Add(Listbox1.Items[i]);
end;

DeddyH 16. Apr 2008 17:28

Re: Listboxen vergleichen
 
Ich hatte es genau andersherum verstanden. Dann ändere mal die If-Abfrage von < 0 auf >= 0. Achwas, ich mache das eben selbst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  //alle Einträge von ListBox1 durchgehen
  for i:=0 to Listbox1.Items.Count-1 do
    //wenn Eintrag in ListBox2 auch vorhanden
    if ListBox2.Items.IndexOf(Listbox1.Items[i]) >= 0 then
      //ins Memo schreiben
      Memo1.Lines.Add(Listbox1.Items[i]);
end;
[edit] @Mario: ich hatte die Einträge ins Memo geschrieben, die nicht in ListBox2 vorkommen :zwinker: . Lag wohl an dem Begriff "Sperrliste" :mrgreen: [/edit]

shmia 16. Apr 2008 17:32

Re: Listboxen vergleichen
 
Um zu ermitteln, ob ein Wort gesperrt ist, machst du am Besten eine Unterfunktion (*) :
Delphi-Quellcode:
function TForm1.IsBlockedWord(const s : string):boolean;
begin
  Result := (LB2.Items.IndexOf(s) <> -1);

  // hier an dieser Stelle könne man z.B. auch noch eine zweite Liste (Schimpfwörter) prüfen
  ...
end;
*) ja, man kann tatsächlich in Delphi Unterfunktionen verwenden und damit den Code stark vereinfachen

knolli 16. Apr 2008 17:47

Re: Listboxen vergleichen
 
ok danke!

das war schon die richtige antwort :stupid:

hab mich nur selbst in meine frage nicht reingefunden *peinlich* :oops:

danke!

Larsi 16. Apr 2008 18:53

Re: Listboxen vergleichen
 
@Mods: Bitte verschieben! Ist ja nicht Programmieren allgemein sondern was in Delphi!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz