Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Wort in StringList suchen


AnyKey - Do 08.10.09 14:25
Titel: Wort in StringList suchen
Hi,

habe volgendes Problem: ich will/muss in einem RichEdit ein Wort suchen. Die Zeile in dem das wort gefunden wurde soll dann in einem neuen MDIChild in ein neues Richedit eingefügt werden. Bis jetzt sieht das ganze so aus: #


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
class function TStringManipulation.Suchen(Edit: TRichEdit; Progressbar: TProgressbar; SuchText: String): Bool;
var AResultList : TStringList;
var TextoutList : TSTringList;
var Linemax     : Integer;
var Textlen     : Integer;
var Child       : TfMDIChild;
var i           : Integer;
var j           : Integer;
var x           : Integer;
begin
  result := false;
  try
    AResultList := TStringList.Create;
    Linemax := Edit.Lines.Count-1;
    Textlen := Length(Edit.Lines.Text);
    ProgressBar.Position := 0;
    ProgressBar.Max := Linemax;
    x := 0;
    for i := 0 to Linemax do
    begin
      for j := 0 to Textlen do
      begin
        with Edit do
        begin
          x := posex(SuchText,Edit.Text,x)+1;
          SelStart := posex(SuchText,Edit.Text,x)-1;
          AResultList.Assign(Edit.Lines);   // <- An dieser stelle müsste nun die eine Zeile in der der Text gefunden wurde in die StringListe übertragen werden!!
          result := true;
        end;
      end;
      ProgressBar.Position := Progressbar.Position + 1;
    end;
    if result = true then
    begin
      fMain.CreateMDIChild('Suchergebnisse ' + IntToStr(fMain.MDIChildCount));
      if Assigned(fMain.ActiveMDIChild) then
      begin
        Child := fMain.ActiveMDIChild as TfMDIChild;
        for i := 0 to TextoutList.Count -1 do
        begin
          with Child.RichEdit1 do
          begin
            SelStart := 0;
            SelText := AResultList.Strings[i]+sLineBreak;//TextoutList.Strings[i]+sLineBreak;
            result := true;
          end;
        end;
      end;
    end;
    FreeAndNil(AResultList);
  except
    FreeAndNil(AResultList);
  end;
end;


Also das sieht jetzt wahrscheinlich sehr verwirrend aus und stimmt unter umständen auch garnich, aber ich hoff das mir einer von euch helfen kann, mein Problem ist wie gesagt dass ich aus dem RichEdit jeweils die Zeile in der das Suchwort gefunden wurde in die StringList geschrieben wird um diese später in das RichEdit des anderen MDIChilds zu schreiben.

Hoff ihr könnt mir helfen!

Gruß und Danke
AnyKey

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


baphumet - Do 08.10.09 14:48

Das funktioniert wie folgt, zu erst muß die StringList sortiert werden und dann kann
gesucht werden.:


Delphi-Quelltext
1:
2:
StringList.Sort;
StringList.Find(String,Index);


Der Index wird dabei zurückgegeben und die Funktion gibt true zurück falls der String gefunden wurde, anderenfalls gibt die Funktion false zurück.


SvenAbeln - Do 08.10.09 14:50


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
AResultList := TStringList.Create;
for i := 0 to Edit.Lines.Count-1 do     // Alle Zeilen durchgehen
  if pos(SuchText,Edit.Lines[i]) > 0 then // Wenn SuchText in der Zeile
    AResultList.Add(Edit.Lines[i]);     //   Zeile in ResultList einfügen

Result := AResultList.Count > 0;        

(.. Ergebnis ausgeben ..)

AResultList.Free;


Lannes - Do 08.10.09 14:53

Hallo,

oder direkt in das zweite Richedit übertragen

Delphi-Quelltext
1:
2:
3:
for z := 0 to RE_1.Lines.Count -1 do
  if Pos('SuchString',RE_1.Lines[z] > 0 then
    RE_2.Lines.Add(RE_1.Lines[z]);


AnyKey - Do 08.10.09 15:00

Hallo,

danke, das funktioniert super! Ich habe mit sicherheit 4 verschiedene Lösungswege ausprobiert, aber wirklich funktioniert hat es nie. :( schön zu sehen das die Lösung so leicht ist und ich einfach den Wald vor lauter Bäumen nich gesehen habe!

nochmals danke!

Gruß
AnyKey