Autor Beitrag
Sahroma
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mo 22.06.15 09:54 
Hallo zusammen,

ich habe ein Suchprogramm geschrieben, dass in .pas, .dfm und .txt Dateien, nach Wörtern sucht die in einer Editbox eingetragen werden. Zusätzlich befindet sich noch eine Editbox in der Form wo der Pfad steht in dem gesucht werden soll. Nun habe ich die Anweisung noch ein Memo Feld einzubauen in dem man, wenn eine Checkbox markiert ist, Ordner einträgt die in der Suche nicht beachtet werden sollen. Da ich noch nicht so lange mit Delphi arbeite und auch nichts vergleichbares bei Google oder hier im Forum gefunden habe, habe ich mich entschlossen mein Problem hier mal zu schildern.

Hat hierfür jemand einen Hinweis wie ich das am besten bewerkstellige bzw. gibt es auch eine andere Möglichkeit Ordner bei der Suche auszuschließen ohne ein MemoFeld?

Danke schon mal für eure Hilfe

Gruß
Sahroma
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 22.06.15 10:07 
Du nimmst eine Listbox, einen TJvSelectDirectory-Dialog und einen Button. In der Button-Ereignisbehandlung rufst du den Dialog auf, wählst dein Verzeichnis und trägst es in die Listbox ein. Dann machst du dir noch einen Button, um die Listbox zu lehren und fertig.
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mo 22.06.15 10:47 
Danke für die Antwort. An so etwas habe ich schon gedacht. Mein Problem ist hierbei wie setz ich das in Code um damit er die Ordner im MemoFeld bzw. ListBox bei der Suche beachtet? Hier mal die Suchprozedur:

ausblenden volle Höhe 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:
55:
56:
57:
58:
59:
procedure TVolltextsuche.FindMyFiles;
var
  LFiles: TStringDynArray;
  LValue: string;
  T: Integer;
  List: TListItem;
begin
  pb1.Min := 0;
  pb1.Max := 80;
  pb1.Step := 20;
  begin
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text,'*.txt',TSearchOption.soAllDirectories,BuildDirectoryFilterPredicate(ebSuche.Text));
  lvErgebnis.Items.BeginUpdate;
  try
    for LValue in LFiles do
      begin
        List := lvErgebnis.Items.Add;
        List.Caption := (ExtractFileName (LValue));
        List.SubItems.Add(ExtractFileDir (LValue));
        List.SubItems.Add(ExtractFileExt (LValue));
      end;
  finally
    lvErgebnis.Items.EndUpdate;
  end;
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text,'*.dfm',TSearchOption.soAllDirectories,BuildDirectoryFilterPredicate(ebSuche.Text));
  lvErgebnis.Items.BeginUpdate;
  try
    for LValue in LFiles do
      begin
        List := lvErgebnis.Items.Add;
        List.Caption := (ExtractFileName (LValue));
        List.SubItems.Add(ExtractFileDir (LValue));
        List.SubItems.Add(ExtractFileExt (LValue));
      end;
  finally
    lvErgebnis.Items.EndUpdate;
  end;
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text,'*.pas',TSearchOption.soAllDirectories,BuildDirectoryFilterPredicate(ebSuche.Text));
  lvErgebnis.Items.BeginUpdate;
  try
    for LValue in LFiles do
      begin
        List := lvErgebnis.Items.Add;
        List.Caption := (ExtractFileName (LValue));
        List.SubItems.Add(ExtractFileDir (LValue));
        List.SubItems.Add(ExtractFileExt (LValue));
      end;
  finally
    lvErgebnis.Items.EndUpdate;
  end;
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text, '*', TSearchOption.soAllDirectories);
  ebDTreffer.Text := intToStr(Length(LFiles));
  ebGTreffer.Text := IntToStr(lvErgebnis.Items.Count);
  end;
end;
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 22.06.15 10:56 
Guck Dir mal in der Hilfe das Thema zu TDirectory.GetFiles an. Da gibt es den Parameter "Predicate". Da kannst Du eine Function übergeben, die ggf. unerwünschte Ergebnisse rausfiltert. Da würde ich ansetzen.
Wie die Funktion deklariert werden muss, siehst Du im Hilfethema zu System.IOUtils.TDirectory.TFilterPredicate

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mo 22.06.15 13:17 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Guck Dir mal in der Hilfe das Thema zu TDirectory.GetFiles an. Da gibt es den Parameter "Predicate".

Diese Idee hatte ich bereits schon bevor das mit dem MemoFeld Thema wurde. Es ist schon Bestandteil meines bisherigen Codes. ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function TVolltextsuche.ContentContainsText(const AContent: stringconst ASearchText: string): Boolean;
begin
  Result := AContent.Contains(ASearchText);
end;

function TVolltextsuche.BuildDirectoryFilterPredicate(ASearchText: string): TDirectory.TFilterPredicate;
var
i: Integer;
begin
  Result :=
    function(const Path: stringconst SearchRec: TSearchRec): Boolean
    begin
      Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, SearchRec.Name))), ASearchText);
      if Path[i]='' then Inc(i);
    end;
end;

function TVolltextsuche.GetContentFromFile(const AFilename: string): string;
begin
  Result := TFile.ReadAllText(AFilename);
end;


Kann ich das mit dem MemoFeld dort irgendwie einbinden? Komme nämlich nicht darauf wie. :oops:
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 22.06.15 13:19 
Das sieht doch schon gar nicht so schlecht aus. Du musst eigentlich nur die anonyme Funktion in BuildDirectoryFilterPredicate so erweitern, dass dort zusätzlich noch geprüft wird, ob der Pfad in dem Memo. Wie Du auf die Zeilen im Memo zugreifst, weißt Du?

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mo 22.06.15 13:33 
Mit Memo.lines greift man auf eine MemoFeld zu oder?
Versteh ich dich dann richtig? Ich müsste einfach in der Funktion "BuildDirectoryFilterPredicate" eine z.B. If-Schleife reinbauen die checkt ob die Checkbox für den Filter markiert ist, wenn ja soll er im Memo Feld nach den Ordner Namen schauen und diese dann in der weiteren Suche beachten und beim Ergebnis ausschließen?
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 22.06.15 13:44 
Ich würde einfach Deine Zeile 14 aus Deinen Codebeispiel erweitern:

ausblenden Delphi-Quelltext
1:
Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, SearchRec.Name))), ASearchText) and (not "Path ist in dem Memo enthalten");					


Für das "Path ist in Memo enthalten" würde ich mir eine Funktion schreiben, damit es übersichtlich bleibt.
Und in der Funktion musst ja nur prüfen, ob irgendeiner von memo.lines mit Deinem Path übereinstimmt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Sahroma
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mo 22.06.15 13:48 
Super!
Danke für die Tipps. Die helfen mir jetzt auf jeden Fall weiter.

Gruß
Sahroma

P.S. Im nachhinein war die Lösung recht einfach. :oops:
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Di 23.06.15 10:45 
Ich bins wieder. ;)

Habe irgendwie Probleme die Funktion für das TMemoFeld richtig aufzubauen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function TVolltextsuche.IncMemoField(ASearchText: string): TDirectory.TFilterPredicate;
var
i: Integer;
begin
  Result :=
    function(const Path: stringconst SearchRec: TSearchRec): Boolean
    begin
      Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, mFilter.Lines[1]))), ASearchText);
      if Path[i]='' then Inc(i);
    end;
end;


Irgendwas fehlt da noch bzw. ist komplett falsch. Könnt ihr mir da helfen? Bin da wohl mit etwas durcheinander gekommen.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 23.06.15 10:58 
Die Funktion muss ja nur einen Boolschen Wert zurückgeben.

Bei mir würde Funktion ungefähr so deklariert werden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function IsPathInMemo(APath : String) : Boolean;
begin

  {hier prüfen, ob eine der Zeilen mit APath überein stimmt}

end;


Und diese Funktion kannst Du dann in Deinem ursprünglichen Codeschnippsel verwenden.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Di 23.06.15 13:37 
So die Funktionen stehen und der Compiler meckert nicht rum.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function TVolltextsuche.IncMemoField(ASearchText: string): Boolean;
var
Path: String;
i: Integer;
begin
  for i := 0 to mFilter.Lines.Count - 1 do begin
  Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, mFilter.Lines[i]))), ASearchText);
  end;
end;

function TVolltextsuche.BuildDirectoryFilterPredicate(ASearchText: string): TDirectory.TFilterPredicate;
var
i: Integer;
begin
  Result :=
    function(const Path: stringconst SearchRec: TSearchRec): Boolean
    begin
      Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, SearchRec.Name))), ASearchText) and
        (not IncMemoField(ASearchText));
      if Path[i]='' then Inc(i);
    end;
end;


Nun bekomme ich aber wenn ich die Suche starte 2 verschiedene Fehlermeldungen:

1. Wenn ich einen Ordner in das MemoFeld schreibe sagt er mir: "Die angegebene Datei wurde nicht gefunden"
2. Wenn das Memofeld leer ist bringt er mir kurz nach dem Start: "Ungültige Zeichen im Pfad"

Wo liegt der Fehler? Ich finde ihn nicht... :(
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 23.06.15 15:50 
Du denkst viel zu kompliziert. Du musst nur prüfen, ob der Pfad mFilter.Lines[i] entspricht. Das ist Vergleich von 2 Strings. Mehr nicht.
Wofür rufst Du ContentContainsText, PrepareContentForSearch und GetContentFromFile auf? Brauchst Du doch alles gar nicht.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Di 23.06.15 16:59 
Kommt bei mit ab und zu vor, komplizierter machen als es ist. :oops:
Aber ich zweifel jetzt echt an meinen Programmierkenntnissen. Habe die zwei Strings jetzt verglichen und diese Funktion mit in mein Schnipsel eingebracht, die Fehlermeldungen kommen zwar nicht mehr aber er ignoriert das was ich in das MemoFeld schreibe komplett. Das wird langsam echt peinlich für mich.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function TVolltextsuche.IncMemoField(Path: string): Boolean;
var
i: Integer;
begin
  for i := 0 to mFilter.Lines.Count - 1 do begin
    if Path = mFilter.Lines[i] then
    Result:= Path.Contains(mFilter.Lines[i]);
  end;
end;

function TVolltextsuche.BuildDirectoryFilterPredicate(ASearchText: string): TDirectory.TFilterPredicate;
var
i: Integer;
begin
  Result :=
    function(const Path: stringconst SearchRec: TSearchRec): Boolean
    begin
      Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, SearchRec.Name))), ASearchText) and (not IncMemoField(Path));
      if Path[i]='' then Inc(i);
    end;
end;
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 23.06.15 17:03 
Du bist auf dem richtigen Weg :zustimm:

Das würde ich noch weiter vereinfachen:
ausblenden Delphi-Quelltext
1:
2:
 if Path = mFilter.Lines[i] then
    Result:= Path.Contains(mFilter.Lines[i]);


ausblenden Delphi-Quelltext
1:
result := (Path = mFilter.Lines[i]);					


Jetzt gibt es nur noch 2 Problemchen. Du musst Groß-/Kleinschreibung ignorieren und Du musst Dir überlegen, war Du machst, wenn der Pfad mal mit abschließenden Backslash eingegeben wurde oder mit Backslash.
Stichworte: CompareText und IncludeTrailingPathDelimiter (siehe Onlinehilfe)

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mi 24.06.15 10:11 
Soweit so gut. Wenn man jetzt in das MemoFeld ein Ordnerpfad angibt wird dieser im Ergebnis nicht angezeigt. Danke für die Hilfe. :zustimm:

Zwei kleine Probleme habe ich aber noch und zwar beachtet er nur die erste Zeile im MemoFeld, wenn ich noch weitere Pfade angebe werden sie im Ergebnis trotzdem angezeigt. Müsste nicht normalerweise for i := 0 to mFilter.Lines.Count - 1 do begin alle Zeilen beachten? Oder versteh ich da etwas falsch?

Das Zweite Problem, er nimmt zwar den Ordner aus dem Ergebnis, die jeweiligen Unterordner (von dem Ordner wo ausgeschlossen wurde) werden aber trotzdem angezeigt.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 24.06.15 10:53 
Ja, so müssten eigentlich alle Zeilen beachten werden. Zeig mal bitte deine ganze Funktion.

Mit den Unterordnern: Dann musst Du prüfen, ob der aktuelle Pfad mit dem Pfad aus dem Memo anfängt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Mi 24.06.15 12:01 
Habe mich wegen den Zeilen falsch ausgedrückt wie ich eben sehe. Er beachtet immer die aktuelle Zeile wo man eingegeben hat.

Zum Beispiel steht im MemoFeld folgendes:

c:/
c:/test123

da beachtet er die zweite Zeile und nicht die erste. Füge ich weitere hinzu wird immer die letzte Zeile genommen. Der Code ist immer noch der selbe wie ich oben (gestern 16:59) gepostet habe. Habe CompareText und IncludeTrailingPathDelimiter noch nicht drin. Liegt es daran (glaube nicht)?

ausblenden 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:
function TVolltextsuche.ContentContainsText(const AContent: stringconst ASearchText: string): Boolean;
begin
  Result := AContent.Contains(ASearchText);
end;

function TVolltextsuche.GetContentFromFile(const AFilename: string): string;
begin
  Result := TFile.ReadAllText(AFilename);
end;

function TVolltextsuche.IncMemoField(Path: string): Boolean;
var
i: Integer;
begin
  for i := 0 to mFilter.Lines.Count - 1 do begin
    Result:= (Path = mFilter.Lines[i]);
  end;
end;

function TVolltextsuche.BuildDirectoryFilterPredicate(ASearchText: string): TDirectory.TFilterPredicate;
var
i: Integer;
begin
  Result :=
    function(const Path: stringconst SearchRec: TSearchRec): Boolean
    begin
      Result := ContentContainsText(PrepareContentForSearch(GetContentFromFile(TPath.Combine(Path, SearchRec.Name))), ASearchText) and (not IncMemoField(Path));
      if Path[i]='' then Inc(i);
    end;
end;


Hier noch die Prozedur:

ausblenden volle Höhe 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:
55:
56:
57:
58:
procedure TVolltextsuche.FindMyFiles;
var
  LFiles: TStringDynArray;
  LValue: string;
  List: TListItem;
begin
  pb1.Min := 0;
  pb1.Max := 80;
  pb1.Step := 20;
  begin
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text,'*.txt',TSearchOption.soAllDirectories,BuildDirectoryFilterPredicate(ebSuche.Text));
  lvErgebnis.Items.BeginUpdate;
  try
    for LValue in LFiles do
      begin
        List := lvErgebnis.Items.Add;
        List.Caption := (ExtractFileName (LValue));
        List.SubItems.Add(ExtractFileDir (LValue));
        List.SubItems.Add(ExtractFileExt (LValue));
      end;
  finally
    lvErgebnis.Items.EndUpdate;
  end;
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text,'*.dfm',TSearchOption.soAllDirectories,BuildDirectoryFilterPredicate(ebSuche.Text));
  lvErgebnis.Items.BeginUpdate;
  try
    for LValue in LFiles do
      begin
        List := lvErgebnis.Items.Add;
        List.Caption := (ExtractFileName (LValue));
        List.SubItems.Add(ExtractFileDir (LValue));
        List.SubItems.Add(ExtractFileExt (LValue));
      end;
  finally
    lvErgebnis.Items.EndUpdate;
  end;
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text,'*.pas',TSearchOption.soAllDirectories,BuildDirectoryFilterPredicate(ebSuche.Text));
  lvErgebnis.Items.BeginUpdate;
  try
    for LValue in LFiles do
      begin
        List := lvErgebnis.Items.Add;
        List.Caption := (ExtractFileName (LValue));
        List.SubItems.Add(ExtractFileDir (LValue));
        List.SubItems.Add(ExtractFileExt (LValue));
      end;
  finally
    lvErgebnis.Items.EndUpdate;
  end;
  pb1.StepIt;
  LFiles := TDirectory.GetFiles(ebPfad.Text, '*', TSearchOption.soAllDirectories);
  ebDTreffer.Text := intToStr(Length(LFiles));
  ebGTreffer.Text := IntToStr(lvErgebnis.Items.Count);
  end;
end;
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 24.06.15 12:31 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function TVolltextsuche.IncMemoField(Path: string): Boolean;
var
i: Integer;
begin
  for i := 0 to mFilter.Lines.Count - 1 do begin
    Result:= (Path = mFilter.Lines[i]);
  end;
end


Überleg mal, was diese Schleife wirklich macht!
Bei jedem Scheifendurchlauf, wird dem Result etwas zugewiesen. Somit wird eigentlich nur die letzte Zeile des Memos ausgewertet, das Du das Ergebnis der anderen Zeilen immer wieder überschreibst.
Du solltest Die Schleife also abbrechen, wenn Du gefunden hast, was Du suchst.

Außerdem sollte beim Kompilieren eine Warnung kommen. "Rückgabewert der Funktion könnte undefiniert sein" oder so ähnlich. Die Warnung solltest Du nicht ignorieren.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Sahroma
Sahroma Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 66
Erhaltene Danke: 1


Delphi 10 Seattle, Delphi 10.1 Berlin
BeitragVerfasst: Fr 26.06.15 07:58 
Ups das war ein Anfängerfehler. :oops:
Habe es jetzt endlich hinbekommen er beachtet auch jetzt die Unterordner. Vielen Dank für deine Hilfe Nersgatt.