Autor Beitrag
Mindforce
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: Sa 11.10.08 16:11 
HAllo Cmommunity,

seit letzter Zeit suche ich sehr viel im Forum herum und habe folgendes vor:

- Ich habe ein Edit, indem ich einen Suchbegriff eingebe. Dort gebe ich z.B. "hal" ein.
- In meiner ListBox stehen z.B. "Hallo" nächste Zeile "Moin" .. "Hallö" .. "Halle" etc.
- Wenn ich dann auf Suchen drücke, soll er mir alle 3 Hallo-Sorten auflisten, da "Hallo", "Hallö" und "Halle" mit "hal" anfangen. Bei mir spuckt er nämlich im Moment nur ein Ergebnis raus.
- Auch soll er Groß- und Kleinschreibung nicht beachten! "hal" bzw. "Hal"

Mein derzeitiger Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function Search(ListBox:TListBox;Str:string;CaseSen:boolean=False):integer;
var s:string;
    i:integer;
begin
 Result:=-1;
 if not CaseSen then Str:=AnsiUpperCase(Str);
 for i:=0 to ListBox.Items.Count-1 do begin
  s:=ListBox.Items[i];
  if not CaseSen then s:=AnsiUpperCase(s);
  if pos(Str,s)>0 then begin
   Result:=i;
   exit;
  end;
 end;
end;

// Aufruf

IndexOfEx(ListBox1,'Hallöle',False);


Falls jemand versteht, was ich meine währe ich ihm sehr verbunden mir zu helfen :D

Danke im Voraus.

M!ndbyte

_________________
Our force; in mind.


Zuletzt bearbeitet von Mindforce am So 12.10.08 00:10, insgesamt 3-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 16:19 
Schau Dir mal die Funktion AnsiStartsText aus der Unit StrUtils an.
Mindforce Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: Sa 11.10.08 16:23 
Mit AnsiStartsText bzw. StartsStr kann ich nichts anfangen, da dies (wie ich es gesehen hab) nur einen wert ausgibt.
Oder teusche ich mich?

M!ndbyte

_________________
Our force; in mind.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 16:26 
Richtig. Die Funktion gibt Dir zurück, ob ein Text mit einem anderen beginnt (ohne Berücksichtigung der Groß- und Kleinschreibung). Das jetzt noch in eine Schleife und fertig ;)
Mindforce Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: Sa 11.10.08 17:01 
.. die ich nicht umsetzen kann :P
Dann müsste ich eine weitere ListBox erstellen, wo in jeder Zeile aufgeschreiben wird, welche Zeilen schon durchsucht worden sind, damit er die überspringt. Irgendwie keine gute Lösung!

M!ndbyte

_________________
Our force; in mind.


Zuletzt bearbeitet von Mindforce am So 12.10.08 00:23, insgesamt 1-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 17:12 
Ich hab da mal was gebastelt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure ListMatches(const src, dest: TStrings; const Pattern: string;
                      CaseSensitive: Boolean = false);
var i: Integer;
begin
  dest.BeginUpdate;
  try
    dest.Clear;
    for i := 0 to src.Count-1 do
      if (CaseSensitive and AnsiContainsStr(src[i],Pattern)) or
         (not CaseSensitive and AnsiContainsText(src[i],Pattern))  then
        dest.Add(src[i]);
  finally
    dest.EndUpdate;
  end;
end;


Der erste Parameter ist die Quellliste, der zweite die Zielliste, der dritte der Suchstring und der vierte legt fest, ob Case-Sensitiv gesucht werden soll.

Beispielaufruf:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm36.Button1Click(Sender: TObject);
begin
  ListMatches(ListBox1.Items,ListBox2.Items,'Ein',true);
end;


[edit] Von der Suche am Anfang auf Suche irgendwo im Text geändert. [/edit]


Zuletzt bearbeitet von DeddyH am Sa 11.10.08 17:19, insgesamt 1-mal bearbeitet
Mindforce Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: Sa 11.10.08 17:19 
Ja, thx! Das geht schonmal in die richtige Richtung. Aber es sucht wie gesagt nur am Anfang der Zeile.
Aber das liegt dann am AnsiStartsStr, richtig?
Gibt´s da noch Alternativen?

MfG,

M!ndbyte

_________________
Our force; in mind.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 17:21 
Ich hab' s schon editiert.
Mindforce Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: Sa 11.10.08 17:23 
DANKE!
Danke, danke, danke!

Endlich gehts.

Vielen Dank!!

M!ndbyte

_________________
Our force; in mind.