Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mehrere Dateien nach String durchsuchen (https://www.delphipraxis.net/1296-mehrere-dateien-nach-string-durchsuchen.html)

foxy 11. Nov 2002 13:32


Mehrere Dateien nach String durchsuchen
 
servus Leute hab mal ne frage wenn ich einen Best. String habe kann ich dann alle .txt dateien in einem ordner nach diesem absuchen ... also ich meine den Inhalt der .txt dateien .....

Bitte um rückmeldung

Christian Seehase 11. Nov 2002 14:10

Moin Foxy,

sicher geht das.
Jetzt stellt sich mir noch die Frage, wo genau Dein Problem liegt:
Finden der Dateien?
Lesen der Dateien?
Wie nach einem String suchen?

Alles zusammen?

Irgendetwas anderes?

wwerner 12. Nov 2002 06:12

Hi Foxy, in der Netikette sind crosspostings unerwünscht. Erst einmal in einem Forum fragen und nicht gleich in mehreren. Und dann sollte man auch mal selbst suchen. Jedes Forum hat eine Suchfunktion. Hier ist übrigens dein Crossposting: http://www.swissdelphicenter.ch/de/f...666&highlight=

Gruß

WW

sakura 12. Nov 2002 09:16

@wwerner :warn:

Zitat:

Zitat von wwerner
Hi Foxy, in der Netikette sind crosspostings unerwünscht.

Hi,

ich bin gerade noch einmal unsere Regeln alle durchgegangen und habe keinen Verweis darauf gefunden. Ich finde es auch nicht dramatisch, wenn jemand dringend Hilfe braucht, an mehreren Stellen nach einer möglichen Lösung zu suchen. Verschiedene Quellen bieten oft auch verschiedene Lösungsansätze.

@foxy : Wenn Du eine Lösung in einem anderen Forum erhälst sei fair und präsentiere uns diese. Einerseits wissen wir, dass Du jetzt glücklich bist, andererseits kann diese auch uns weiterhelfen. ;)

Oh, und hilf uns auf den Weg. Christians Fragen solltest Du beantworten, damit wir gezielt helfen können.

wwerner 12. Nov 2002 09:27

@sakura
Hi, Ich habe nicht von den Richtlineien in diesem Forum geschreiben, sondern von der allgemeinen Netikette :D

Gruß

Wolfgang

thomasdrewermann 12. Nov 2002 11:02

Trotzdem sehe auch ich keinen Grund eine Frage deshalb nicht zu beantworten.

foxy 12. Nov 2002 11:10

Also Leute
es geht darum ich habe in einer Dir. mehrere txt-files ich will alle nacheinander öffnen um herauszufinden wo mein string der gesucht wird siche befindet .... den string suchen weis ich wie das geht in einer datei aber nich wie ich mehrere Dateien hintereinader öffne .... wenns das irgendmöglich ist was ich nich weis ;) weil ich erst seit 6 monate programmier
also die dateien haben alle den namen xxxch.txt die ich eigentlich öffnen will
xxx steht für ein datum
es gibt aber auch noch dateien in der Dir. xxxdr.txt xxxma.txt die brauch ich eigentlich nicht zu öffnen aber .. ach ka =) ich hoffe ihr kommt damit klar ...
danke im vorraus

thomasdrewermann 12. Nov 2002 11:15

Also muss das Programm die Letzten 6 Zeichen Vergleichen. Wenn diese "ch.txt" sind soll es die Datei öffnen und nach einem vorher eingegebenen String durchsuchen?

foxy 12. Nov 2002 11:18

Genau wenn er in dieser nicht gefunden dann die nächste xxxch.txt durchsuchen ... es gibt für jeden tag eine xxxch.txt

sakura 12. Nov 2002 11:20

Hier also die Routine zum Durchsuchen eines Verzeichnisses. Diese Routine ruft dann die Routine Search mit dem gefundenen Dateinamen inkl. Pfad auf. Diese hast Du wohl schon

Delphi-Quellcode:
procedure FindFiles(Pfad, Mask: String);
var
  SR: TSearchRec;
begin
  // letzten backslash bei Bedarf anhängen.
  if AnsiLastChar(Pfad)^ <> '\' then
    Pfad := Pfad + '\';
  if FindFirst(Pfad + Mask, faAnyFile, SR) = 0 then
  repeat
    if SR.Attributes and faDirectory = 0 then
      [color=#ff0044]Search(Pfad + SR.Name);[/color]
  until FindNext(SR) <> 0;
  FindClose(SR);
end;
[color=#0019ff]
Aufruf mit:

FindFiles('C:\Temp', '*.ch.txt');
[/color]
...:cat:...

foxy 12. Nov 2002 11:24

hmmm thx ich versuch das glei mal ich habs bischer bissal anders gemacht
Code:
s:=UpperCase(DrivecomboBox1.Drive);
     EditDatei.Text:=s+':\*.txt';
     If FindFirst(EditDatei.Text,faAnyfile,searchrec)=0 then begin
        Display;
     end
     else begin
       ShowMessage('Nichts gefunden');
       EditCharge.Clear;
       exit;
     end;
     AssignFile(f,EditDatei.text);
    {$i-}
        Reset(f) ;
    {$i+}
    if IOResult <>0 then
    begin
      ShowMessage ('Fehler: Datei kann nicht geöffnet werden');
      EditCharge.Clear;
      exit;
    end;
  end;
so hab ich das gemacht aber ich versuch das andere dann ma ... mein bsp ging bei eienr datei wunderbar ... ich versuchs einfach

sakura 12. Nov 2002 11:45

Viel Erfolg.

Zur besseren Übersicht, solltest Du aber Dateisuche, Stringsucheund Ergebnissanzeige von einander trennen. <- Erfahrungssache.

...:cat:...

foxy 12. Nov 2002 11:49

ja das iss au noch so was ... ich habe fast alles in eine unit gepackt und die wird mir langsam bissal gros mit 1200 zeilen wie kann ich das ich z.b. wenn ich auf ein button drücke auf ne andere unit verweise ... also nur das diese im hintergrund arbeitet implementation einbinden iss klar aber der befehl

ich habe das versucht mit
Delphi-Quellcode:
Unit drucken;
aber das geht wohl nich so richtig ;)

sakura 12. Nov 2002 11:59

Mal ein kurzes Bsp.

Delphi-Quellcode:

// UNIT uHallo.pas
[color=#ff0022]unit uHallo;[/color]
interface

procedure ShowHallo(Message: AnsiString);

implementation

procedure ShowHallo(Message: AnsiString);
begin
  // message dlg
  ...
end;

end.

// ENDE uHallo.pas
....

....


// Dein Form

unit Form1;

interface

  type TForm1 = class(TForm)
    procedure Button1OnClick(Sender: TObject);
  private
    ...
  public
  end;

implementation
 
[color=#ff0019]uses
  uHallo;[/color]

procedure TForm1.Button1OnClick(Sender: TObject);
begin
  ShowHallo('Du hast Button1 gedrückt!');
end;

end.
Für weitere Fragen sind wir natürlich jederzeit da :)

wwerner 12. Nov 2002 12:04

Delphi-Quellcode:
EditDatei.Text:=s+':\*.txt';
If FindFirst(EditDatei.Text,faAnyfile,searchrec)=0 
  then
    begin
      Display; //Was ist das?
    end
  else
    begin
      ShowMessage('Nichts gefunden');
      EditCharge.Clear;
      exit;
   end;
AssignFile(f,EditDatei.text); // EditDatei.text ist z.B c:\*.txt das kann man nicht öffen

foxy 12. Nov 2002 12:18

Schön mal jemand zu finden der mal direkt antwortet :hello:

aber bei deinem quellcode geht soweit alles hab denke ich auch alles richtig eingefügt nur der findet an der stelle

Delphi-Quellcode:
repeat
    if SR.Attributes and faDirectory = 0 then
      Search(Pfad + SR.Name);
  until FindNext(SR) <> 0;
das serach nicht wie muss ich das deklarieren??

sorry ich hab wirklich noch null plan :oops: [/quote][/center]

sakura 12. Nov 2002 12:20

Der Name Search ist nur ein Beispiel.

Diese Routine ist dann Deine Lösung, um zu überprüfen, ob der gesuchte String in der Datei eigentlich vorkommt.

foxy 12. Nov 2002 12:30

hmm wenns keine umstände macht kannst du die einzelnen schritte erklären das ich das auch richtig in mein programm einbaue?ß

sakura 12. Nov 2002 12:51

Mit FindFiles hast Du jetzt die Routine, welche nach allen Dateien in einem Verzeichnis sucht, welche Deiner Maske entsprechen.

FindFiles ruft jetzt die Routine Search auf, welche für eine bestimmte Datei überprüft, ob der gesuchte String darin vorkommt.

Delphi-Quellcode:
// unvollendetes Beispiel mit suche nach FText
procedure Search(aFileName: String);
begin
  with TStringList.Create do
  try
    LoadFromFile(aFileName);
    if Pos(FText, Text) > 0 then
      ShowMessage('Der Text wurde in der Datei ' + aFileName + ' gefunden.');
  finally
    Free;
  end;
end;
Das ist jetzt nur ein grobes Gerüst, sollte Dir aber weiterhelfen ;)

Daniel B 12. Nov 2002 17:01

Hallo wwerner,

Zitat:

Zitat von wwerner
Hi, Ich habe nicht von den Richtlineien in diesem Forum geschreiben, sondern von der allgemeinen Netikette

Und weisst Du auch das die Netiquette, Crossposting aus Newsgroup kommt und sich nicht in dem Sinne auf Foren übertragen lässt? Warum machst Du nicht gleich ein F'up 2p :?: :!: :?: Wenn Du schon auf diese Regeln stehst :?:

Grüsse, Daniel :hi:


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