Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ListBoxeinträge nach einem bestimmten Wort durchsuchen (https://www.delphipraxis.net/40756-listboxeintraege-nach-einem-bestimmten-wort-durchsuchen.html)

St.Pauli 20. Feb 2005 15:30


ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Hi, wie kann man eine ListBox nach einem bestimten Wort durchsuchen?

Hier ein kleines Beispiel

Wort das gesucht werden soll: Hallo
ListBoxeinträge:

usdshdhsduudhs
dsdiiHallosmdsdk <- soll gefunden werden
Hallo <- soll gefunden werden
oskodosodkak

Am besten wäre, wenn man alle ListBox-Einträge mit for runtergeht, da ich die alle Ergebnisse eh aus der ListBox löschen will.
Jetzt schon mal danke für jede Antwort!!

Sharky 20. Feb 2005 15:34

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Hai St.Pauli,

Du hast dir ja die Antwort schon gegeben. Mit For Listbox.Count -1 downto 0 durch die Listbox laufen.
Dann mit Delphi-Referenz durchsuchenPos prüfen ob das Wort in dem Eintrag vorhanden ist.

alcaeus 20. Feb 2005 15:37

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Hallo St.Pauli,

Delphi-Quellcode:
function DeleteStrings(ListBox: TListBox; Pattern: String; CaseSensitive: Boolean=True): Integer;
var
  DeleteEntry: Boolean;
begin
  Result := 0;
  for i := ListBox.Count-1 downto 0 do
  begin
    if CaseSensitive then
      DeleteEntry := Pos(Pattern, ListBox.Items[i])
    else
      DeleteEntry := Pos(LowerCase(Pattern), LowerCase(ListBox.Items[i]))
    if DeleteEntry then
    begin
      ListBox.Items.Delete(i);
      Result := Result+1;
  end;
end;
Sollte selbsterklaerend sein. Als Rueckgabewert gibts die Anzahl der geloeschten Eintraege.

Greetz
alcaeus

Muetze1 20. Feb 2005 16:36

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Moin!

Alcaeus Code mit Fehlerbehebung:

Delphi-Quellcode:
function DeleteStrings(Items: TStrings; Pattern: String; CaseSensitive: Boolean=True): Integer;
var
  DeleteEntry: Boolean;
begin
  Result := 0;
  for i := Items.Count-1 downto 0 do
  begin
    if CaseSensitive then
      DeleteEntry := (Pos(Pattern, Items[i]) > 0)
    else
      DeleteEntry := (Pos(LowerCase(Pattern), LowerCase(Items[i])) > 0 );
    if DeleteEntry then
    begin
      Items.Delete(i);
      Inc(Result);
  end;
end;
- bei Pos die Ergebnisabfrage vergessen
- ListBox.Items.Count anstatt ListBox.Count
- Inc() beim Result inkrement
- ListBox Abhängigkeit entfernt und auf TStrings umgestellt, somit auch für ComboBoxen, etc

MfG
Muetze1

alcaeus 20. Feb 2005 16:38

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Moin Muetze,

danke fuer die Korrekturen, das kommt davon wenn man IE-Programmierer ist ;)

Diesen hier:
Zitat:

Inc() beim Result inkrement
Haettest du dir sparen koennen, nachdem der finale Code sowieso gleich aussieht ;) Ich habe mir einfach angewoehnt, var := var+1 zu verwenden, da ich oft programmiersprachen wechsle, und so gewisse Patterns (in meinem Kopf) immer gleich sind ;)

Greetz
alcaeus

quakergod 21. Feb 2005 20:19

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
hi, ich hab den code getestet jedoch werden die einträge die das wort enthalten gelöscht, und nicht die die es nicht enthalten..?

alcaeus 21. Feb 2005 20:21

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Zitat:

Zitat von St.Pauli
Am besten wäre, wenn man alle ListBox-Einträge mit for runtergeht, da ich die alle Ergebnisse eh aus der ListBox löschen will.
Jetzt schon mal danke für jede Antwort!!

Ich habs so verstanden dass er alle Eintraege loeschen will, die das Wort enthalten.

Greetz
alcaeus

Binärbaum 21. Feb 2005 20:25

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
@quakergod
Dann ändere in den Codezeilen mit pos das >0 in =0 und schon werden die Einträge gelöscht, die das Pattern nicht enthalten.

MfG
Binärbaum

Hansa 21. Feb 2005 20:27

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Zitat:

Zitat von quakergod
hi, ich hab den code getestet jedoch werden die einträge die das wort enthalten gelöscht, und nicht die die es nicht enthalten..?

Pos (blubb...) > 0 heißt : das wort ist da drin. Pos = 0 heißt : es ist NICHT da.

Binärbaum 21. Feb 2005 20:38

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
@Hansa:
Das gleiche steht doch schon einen Beitrag weiter oben.

Hansa 21. Feb 2005 20:48

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Es könnte sich um 61 Sek. handeln. 8)

Und hier steht es noch viel früher :

http://www.delphipraxis.net/internal...692&highlight=

:mrgreen:

quakergod 21. Feb 2005 21:32

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Delphi-Quellcode:
function DeleteStrings(Items: TStrings; Pattern: String; CaseSensitive: Boolean=True): Integer;
var
  DeleteEntry: Boolean;
  i : integer;
begin
  Result := 0;
  for i := Items.Count-1 downto 0 do
  begin
    if CaseSensitive then
      DeleteEntry := (Pos(Pattern, Items[i]) = 0)
    else
      DeleteEntry := (Pos(LowerCase(Pattern), LowerCase(Items[i])) = 0 );
    if DeleteEntry then
    begin
      Items.Delete(i);
      Inc(Result);
  end;
end;
end;
wenn ich die funktion so aufrufe:
Delphi-Quellcode:
DeleteStrings(lb_streams.Items, edit_filter.Text, False);
funktionierts ganz gut, nur wenn das wort in der listbox großgeschrieben ist löscht er es auch raus! :?

Hansa 21. Feb 2005 22:24

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Wo ist denn DeleteEntry initialisiert worden ? Davon sehe ich nichts. :shock: Rufst du die Prozedur eventuell mehrmals auf ? "Result" ist als Funktionswert sehr bequem. Aber ich besetze lieber meine eigenen Werte. 8)

Muetze1 22. Feb 2005 03:12

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Moin!

@quakergod: Die Procedure verhält sich vollkommen richtig, schliesslich sagst du ihr beim Aufruf das sie die Gross- und Kleinschreibung nicht beachten soll!

Rufe die Procedure mit
Delphi-Quellcode:
DeleteStrings(lb_streams.Items, edit_filter.Text, True);
auf und es klappt.

MfG
Muetze1

alcaeus 22. Feb 2005 06:31

Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
 
Zitat:

Zitat von Hansa
Wo ist denn DeleteEntry initialisiert worden ? Davon sehe ich nichts.

Du nicht? Ich schon:
Delphi-Quellcode:
if CaseSensitive then
  DeleteEntry := (Pos(Pattern, Items[i]) = 0)
else
  DeleteEntry := (Pos(LowerCase(Pattern), LowerCase(Items[i])) = 0 );
DeleteEntry wird in JEDEM Fall intialisiert :zwinker:

@quakergod: nachdem ich für CaseSensitive einen DefaultWert (=True) zugewiesen habe, brauchst du die Funktion auch nur mit 2 Parametern weglassen. Wenn der 3. Parameter True sein soll, lass ihn weg. Dann wird auch auf die Groß-/Kleinschreibung geachtet.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.

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