Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien suchen + bearbeiten (https://www.delphipraxis.net/29375-dateien-suchen-bearbeiten.html)

sniffy 8. Sep 2004 13:14


Dateien suchen + bearbeiten
 
Hi.

Ich hab ein Programm geschrieben das bestimmte Strings aus einem RichEdit-Feld herausfiltert und in einer ListBox anzeigt. Es sind HTML-Dateien aus denen das Prog die Strings sucht.

Jetzt zu meiner Frage.

Ich will das das Prog ein Verzeichnis (C:\, D:\...) nach HTML-Dateien durchsucht und die HTML-Dateien irgendwie im Hintergrund oder wie auch immer öffnet und nach bestimmten Strings durchsucht und die mir dann in der ListBox anzeigt. Quasi ohne das ich die Datei selber öffnen muss.

Ist das möglich?

Bin noch ein Anfänger.

Phoenix 8. Sep 2004 13:25

Re: Frage ob folgendes funktionieren könnte?
 
Ich habe Deine Frage erst gar nicht gelesen.
Bitte ändere erstmal Deinen Titel zu was aussagekräftigem. Danach schau ich nochmal drüber :zwinker:.

Wuaegner 8. Sep 2004 13:27

Re: Frage ob folgendes funktionieren könnte?
 
Servus sniffy!

Verzeichnisse nach Html-Dateien durchsuchen kannst du mit dieser Prozedur:
Code:
procedure SearchFiles(Ext,StartDir: string;Recursive: Boolean; List: TStrings);
var Rec: TSearchRec;
        i: integer;
        Dir : string;
begin
  Dir := StartDir;
  if AnsiLastChar(Dir) <> '\' then
    Dir := Dir + '\';
  i := FindFirst(StartDir+'*',faAnyFile,Rec);
  while i = 0 do
    begin
      Application.ProcessMessages; //optional
      if Pos(Ext,Rec.Name) > 0 then
        List.Add(Dir+Rec.Name);
      if ((Rec.Attr and faDirectory) > 0) and (Rec.Name <> '.') and
            (Rec.Name <> '..') and Recursive then
        begin
          if AnsiLastChar(Rec.Name) <> '\' then
            Rec.Name := Rec.Name + '\';
          SearchFiles(Ext,StartDir+Rec.Name,Recursive,List);
        end;
      i := FindNext(Rec);
    end;
  FindClose(Rec);
end;
Aufruf:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
   begin
  SearchFiles('.html','C:\',true,ListBox1.Items);
end;
Grüße Flo

sniffy 8. Sep 2004 13:40

Re: Frage ob folgendes funktionieren könnte?
 
Danke für deine Bemühungen Wuaegner!

So weit war ich auch schon.

Ich will wenn ich ein Verzeichnis durchsuche das dann wenn eine Datei gefunden wird, sofort die Datei geöffnet wird (irgend was vielleicht mit exklusivem öffnen zu tun?) und dann automatisch nach einem bestimmten String durchsucht wird! :!: Quasi alles in einem Durchgang.

Und zuletzt soll das Prog mir in der ListBox die gefundenen Strings anzeigen.

Luckie 8. Sep 2004 13:41

Re: Frage ob folgendes funktionieren könnte?
 
Würdest du bitte noch dein Topic gemäß den Forenregeln anpassen, wie es dir schon gesagt wurde?

sniffy 8. Sep 2004 14:21

Re: Dateien suchen + bearbeiten
 
erledigt! 8)

sniffy 8. Sep 2004 14:35

Re: Dateien suchen + bearbeiten
 
Mit dem erledigt meinte ich das ich den Namen des Themas gändert hab.


Ich brauch trotzdem unbedingt HILFE!

Luckie 8. Sep 2004 14:37

Re: Dateien suchen + bearbeiten
 
Zitat:

Zitat von sniffy
Ich brauch trotzdem unbedingt HILFE!

Ginge das etwas konkreter? :roll:

Matze 8. Sep 2004 14:41

Re: Dateien suchen + bearbeiten
 
@sniffy: beiträge kann man auch editieren. ;)

Benutze doch mal die Suche in der DP, diese ist wirklich erstklassig:
Eines der Suchergebnisse


Edit: Wenn du die Pfade der html-Dateien alle z.B. in einer Stringlist hast, kannst du sie auch alle in einer extra Stringlist öffnen und durchsuchen (Hier im Forum suchenPosDelphi-Referenz durchsuchenPos, Hier im Forum suchenPosExDelphi-Referenz durchsuchenPosEx).
Also nur mal so als Beispiel, vielleicht nich gerade Resourcenschonend, aber es geht.

sniffy 8. Sep 2004 14:59

Re: Dateien suchen + bearbeiten
 
@Luckie

ok. ich versuchs.

Momentan sieht das Programm so aus:

Ich hab ein Panel für "Datei öffnen", der HTML-Dateien in ein RichEdit öffnet.

Und ich hab noch ein Panel für Strings suchen/anzeigen. Der durchsucht die HTML-Datei nach bestimmten Strings und listet die in einer ListBox auf. In meinem Fall alle Strings die mit cd_ und ld_ anfangen.

Jetzt will ich aber das das Programm z.B. die C:\ Festplatte nach HTML-Dateien durchsucht. Wenn das Prog die Platte durchsucht hat soll das Prog dann direkt (mit den gefundenen HTML-Dateien)mit den durchsuchen der bestimmten Strings fortfahren ohne die Dateien in ein RichEdit oder sonst wo zu öffnen/laden. Das soll dann irgendwie im Hintergrund oder so gemacht werden.

Wenn er dann die Strings gefunden hat soll das Prog dann die gefundenen Strings in eine ListBox anzeigen.

Ich hoffe das ich jetzt etwas deutlcher war.

Luckie 8. Sep 2004 15:08

Re: Dateien suchen + bearbeiten
 
Deutlich ja. Aber ich verstehe dein Problem nicht. Wie man Dateien findet wurde dir gesagt. Wie du sie in eine StringListe bekommst auch. Wie du eine Datei aus der Stringliste in ein RichEdit bekommst weißt du wohl auch schon. Mit Delphi-Referenz durchsuchenpos eine Zeichenfolge finden dürfte auch für dich im Bereich des Möglichen liegen. Und über eine if-Abfrage den String vergleichen und entscheiden was zu tun ist, dürfte auch für dich lösbar sein. Und wie man Zeichenketten in eine Listbox bejkommt ist mit Hilfe der Delphi Hilfe wohl auch kein Problem.

Matze 8. Sep 2004 15:08

Re: Dateien suchen + bearbeiten
 
Blos nicht im Richedit in Hintergrund ausgeben, mach's mit einer StringList, das ist deutlich schneller.

Mit den Tipps, die du hier bekommen hast, sollte es für dich kein Problem sein, dies umzusetzen.

Luckie 8. Sep 2004 15:27

Re: Dateien suchen + bearbeiten
 
Was ich sagen wollte: Wenn du so ein komplexes Problem hast, zerleg es in überschaubare Teilprobleme und löse die nacheinander.

sniffy 8. Sep 2004 17:19

Re: Dateien suchen + bearbeiten
 
Danke Leute. Werd's versuchen.

:thumb:

sniffy 9. Sep 2004 14:08

Re: Dateien suchen + bearbeiten
 
Hi. Klappt alles soweit. Naja nicht wirklich alles, aber ist ja auch egal.

Ich hab jetzt ein anderes Problem. Mein Prog such ja Verzeichnisse nach HTML-Dateien ab.
Klappt ja auch eigentlich. Mir ist aber aufgefallen das er nicht in Unsichtbaren ordner suchen kann, spirch in C:\Dokumente und Einstellungen\user\Lokale Einstellungen\Temporary Internet Files\.
Da der Ordner Lokale Einstellugen unsichtbar ist kann er folglich im Ordner Temporary Internet Files keine Dateien finden und das sind ja ne menge drin.

Hier die Such-Prozedur:

Delphi-Quellcode:
procedure GetFiles(const ADirectory: string; Files: TStrings;
                   SubFolders: Boolean);
  // Hilfsfunktion, um Schrägstriche zu entfernen bzw. hinzuzfügen, wenn nötig
  function SlashSep(const Path, S: string): string;
  begin
    if AnsiLastChar(Path)^ <> '\' then
      Result := Path + '\' + S
    else
      Result := Path + S;
  end;
var
  SearchRec: TSearchRec;
  nStatus: Integer;
begin
  //Zuerst alle Dateien im aktuelle Verzeichnis finden
  //Anstatt *.* kann auch etwas anderes wie *.jpg oder *.gif eingegeben werden,
  //um nur Dateien eines bestimmten Typs zu finden.
  nStatus := FindFirst(PChar(SlashSep(ADirectory, '*.html')), 0, SearchRec);
  while nStatus = 0 do
  begin
    Files.Add(SlashSep(ADirectory, SearchRec.Name));
    nStatus := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
  //Als nächstes nach Unterverzeichnissen suchen und wenn benötigt durchsuchen
  if SubFolders then
  begin
    nStatus := FindFirst(PChar(SlashSep(ADirectory, '*.*')), faDirectory,
      SearchRec);
    while nStatus = 0 do
    begin
      //Wenn es ein Verzeichnis ist, Rekursion verwenden
      if ((SearchRec.Attr and faDirectory) <> 0) then
      begin
        if ( (SearchRec.Name <> '.') and (SearchRec.Name <> '..') ) then
          GetFiles(SlashSep(ADirectory, SearchRec.Name), Files, SubFolders);
      end;
      nStatus := FindNext(SearchRec)
    end;
    FindClose(SearchRec);
  end;
end;
Wäre nett wenn mir jemand sagen könnte das das Programm auch unsichbare Ordner nach HTML-Dateien scannen kann.
Danke!


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