Genau so mache ich das ja schon. Auswahl der Datein und das einlesen funktioniert ja auch, Beim Debuggen kann ich ja auch sehen, das alle Dateien gelesen werden.
ich zeig hier mal den gesamten Ablauf.
ORDNER wählen...
Delphi-Quellcode:
var
Pfad : String;
begin
SelectDirectory('Bitte Standort der Datenbank wählen', 'D:\Daten' ,Pfad);
FindAllFiles(Pfad,'*.txt',True); //Verweis auf FindAllFiles Procedure
DATEIEN suchen und an PARSE Function übergeben
Delphi-Quellcode:
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var
SR: TSearchRec;
Parser: TMySimpleBaseParser;
FileStream: TFileStream;
FileContents: TStringStream;
begin
if RootFolder = '' then
Exit;
if AnsiLastChar(RootFolder)^ <> '\' then
RootFolder := RootFolder + '\';
RootFolder := IncludeTrailingPathDelimiter(RootFolder);
if Recurse then
if
FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory = faDirectory then
if (SR.Name <> '.') and (SR.Name <> '..') then
FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory <> faDirectory then
begin
ImportForm.Memo1.Lines.Add(RootFolder + SR.Name); //Datein in Memo auflisten
Parser := TMySimpleParserB.Create; //Parser erstellen
ImportForm.DoParse(Parser, RootFolder + SR.Name); //aktuelle Datei Parsen lassen
ImportForm.DisplayResult(Parser); //Aktuelle geparste Datei ausgeben
Parser.Free;
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
Geparste Datei ausgeben
Delphi-Quellcode:
procedure TImportForm.DisplayResult(Parser: TMySimpleBaseParser);
var
i: Integer;
ID : Integer;
Daten : TOMBSerie;
begin
ID := 1;
ProgBarDatei.Max := High(Parser.EntriesMB256);
VST.Clear;
VST.BeginUpdate;
for i := 0 to High(Parser.EntriesMB256) do begin
Daten := TOMBSerie.Create;
with Daten do
begin
Daten.ID := ID;
Daten.LfdNr := Parser.EntriesMB256[i].LfdNr;
Daten.Datum := Parser.EntriesMB256[i].Datum;
Daten.Uhrzeit := Parser.EntriesMB256[i].Uhrzeit;
Daten.Ereignis := Parser.EntriesMB256[i].Ereignis;
Daten.Teilnehmer := Parser.EntriesMB256[i].Teilnehmer;
Daten.Bereich := Parser.EntriesMB256[i].Bereich;
end;
VST.AddChild(nil, Daten);
ProgBarDatei.Position := ID;
Inc(ID);
end;
VST.ScrollIntoView(VST.GetLast, true);
VST.EndUpdate;
end;
Und selbst bei DisplayResult, werden alle Dateien durchlaufen.
Mein Problem ist nur, das nicht alle Dateien, die die Function DosplayResult durchlaufen haben im VST dargestellt werden. Im Memo, kann man allerdings alle sehen.
MFG
Jens