![]() |
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:
Ich habe noch eine andere Listbox, in der Wörter stehen, die nicht eingetragen werden sollen.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~ 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; 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? |
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) |
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:
ich glaube aber das die bedingung des IndexOf falsch ist...
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. wenn es so ist dürfte es die Wörter aufschreiben, die nicht drin sind oder? ich hab damit noch nie gearbeitet... :gruebel: |
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; |
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. |
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; |
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:
[edit] @Mario: ich hatte die Einträge ins Memo geschrieben, die nicht in ListBox2 vorkommen :zwinker: . Lag wohl an dem Begriff "Sperrliste" :mrgreen: [/edit]
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; |
Re: Listboxen vergleichen
Um zu ermitteln, ob ein Wort gesperrt ist, machst du am Besten eine Unterfunktion (*) :
Delphi-Quellcode:
*) ja, man kann tatsächlich in Delphi Unterfunktionen verwenden und damit den Code stark vereinfachen
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; |
Re: Listboxen vergleichen
ok danke!
das war schon die richtige antwort :stupid: hab mich nur selbst in meine frage nicht reingefunden *peinlich* :oops: danke! |
Re: Listboxen vergleichen
@Mods: Bitte verschieben! Ist ja nicht Programmieren allgemein sondern was in Delphi!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz