Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teilstrings aus String herausfiltern. (https://www.delphipraxis.net/104944-teilstrings-aus-string-herausfiltern.html)

Aurelius 13. Dez 2007 07:12


Teilstrings aus String herausfiltern.
 
Hi DPler :hi:

Ich möchte in meiner Suchfunktion nach Einträgen in einer Listbox suchen. Das soll nat. auch funktionieren wenn in der LSB "Hallo_Welt" steht und ich in der Suchmaske "hallo Welt" schreibe. dafür muss ich ja die einzelnen Teilstrings "Hallo" und "Welt" aus dem Suchfeld rausfiltern und schauen ob das Ganze in der LSb ist (da er ja bei einem reinen vergleich beider Strings ein FALSE ausgeben würde, da "hallo Welt" <> "hallo_Welt").
Mein Problem ist dabei das Herausfiltern der Teilstrings. Ich nutze diesen Code:

Delphi-Quellcode:
 var Suchtext : String;
 u : integer;

 Suchtext := edSuchen.Text;
 u := 0;
 repeat
 begin
  Length(Teilstrings,u+1);
  if Pos(' ',Suchtext) > 0 then
   Teilstrings[u] := AnsiLeftStr(Suchtext,Pos(' ',Suchtext)-1)
  else
   Teilstrings[u] := Suchtext;
   Suchtext := AnsiRightStr(Suchtext,Length(Suchtext) - Pos(' ',Suchtext));
   u := u + 1;
 end
 until Pos(' ',Suchtext) = 0;
Logischerweise findet er aber dabei nicht den letzten Teilstringwenn schon ein Leerzeichen vorkommt, er findet diesen erst wenn nach dem letzten Teilstring ein Leerzeichen kommt. Ich weiß nat. woran das Problem liegt (an der UNTIL-Bedingung), aber mir fällt einfach keine Möglichkeit ein das zu lösen...

QuickAndDirty 13. Dez 2007 07:46

Re: Teilstrings aus String herausfiltern.
 
Du must erst die einzelnen Gesuchten Wörter erkennen und in eine Liste ablegen.
Dann erst das eine und dann das andere suchen.
Es sei denn du meintest 'Hallo*Welt' oder 'Hallo?Welt'
Für sowas eignest sich Masks.MatchesMask(const Filename, Mask: string): Boolean; ...auch wenn da dateiname steht...
wenn du es ganz komfortabel haben willst dann empfehle ich dir eine
UNIT zu suchen die Reguläre Ausdrücke unterstützt.

Aurelius 13. Dez 2007 07:53

Re: Teilstrings aus String herausfiltern.
 
Sry, aber was hat das mit meiner Frage zu tun? Wie ich das vergleiche ist klar, mir geht es um das herausfiltern der Strings. Damit hab ich ja das Problem mit meinem Code. Deine Antwort wäre wenn ich gar keine Ahnung hätte wie ich das Ganze insgesamt angehen müsste, und das weiß ich ja, es geht mir eben darum die einzelnen Teilstrings rauszufiltern ;)

DeddyH 13. Dez 2007 07:58

Re: Teilstrings aus String herausfiltern.
 
Dafür sind die regulären Ausdrücke doch wunderbar geeignet.

Reinhardtinho 13. Dez 2007 08:03

Re: Teilstrings aus String herausfiltern.
 
Hi,

Delphi-Quellcode:
type
  TsArray = Array of String;

function GetSubStrings(AString: String; Delimiter: Char) : TsArray;
var
  i: Integer;
begin
  SetLength(result, 0);

  i := 0;

  while (Pos(Delimiter, aString) <> 0) do
  begin
    SetLength(Result, i+1);
    Result[i] := Copy(aString, 0, Pos(Delimiter, aString) - 1);
    Delete(aString, 1, Pos(Delimiter, aString));
    inc(i);
  end;

  if (Length(aString) <> 0) then
  begin
    SetLength(Result, i+1);
    Result[i] := aString;
  end;
end;
Hiermit suche ich die einzelnen SubStrings in einem Editfeld und übergebe das ganze an ein dynamische Array. Man kann natürlich auch eine Stringliste benutzen. In Delimeter musst du halt dann dein '_' angeben.

MFG
Lorenz

Aurelius 13. Dez 2007 08:25

Re: Teilstrings aus String herausfiltern.
 
Das seiht doch nicht schlecht aus.

Ich habe mich auch mal nach den reg. Ausdrücken erkundigt und werde es auch mal damit versuchen. Scheint aber recht kompliziert zu sein...

QuickAndDirty 13. Dez 2007 08:32

Re: Teilstrings aus String herausfiltern.
 
Mach das! Regexen ist DAS Mittel zur Suche bzw. Filterung.

Aurelius 13. Dez 2007 08:53

Re: Teilstrings aus String herausfiltern.
 
Ich bin da bis jetzt auf Das TPerlRegEx gestoßen. Gibts dafür deutsche tuts?

@Reinhardtinho: Ich hab das mal schnell gemacht aber es funktioniert so nicht. Die "Liste" enthält nur 1 Element...

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var Liste : tsarray;
    i, u : integer;
    boola : bool;
begin
  Listbox2.Clear;
  for i := 0 to 3 do
  begin
    Boola := TRUE;
    Liste := GetSubstrings(Listbox1.Items.Strings[i],Char(' '));
    Label1.Caption := InttoStr(High(liste));
    for u := 0 to high(Liste) do
     if not ansicontainstext(Listbox1.Items.Strings[i],Liste[u]) then
      Boola := FALSE;
    if Boola then
      Listbox2.Items.Add(Listbox1.Items.Strings[i])
  end;
end;

Reinhardtinho 13. Dez 2007 09:08

Re: Teilstrings aus String herausfiltern.
 
Stehen in der ListBox1 die Wörter die gesucht werden sollen? Gib mal bitte ein Beispiel.

Aurelius 13. Dez 2007 09:22

Re: Teilstrings aus String herausfiltern.
 
In der Listbox1 steht:
Hallo Welt
Hallo_Welt
Hallo
Welt

Komischerweise wird, sobald ich etwas in das Edit-feld reinschreibe, alles in der Listbox2 übernommen :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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