procedure TForm1.ProcessFile(Filename: TFileName);
var
I: Integer;
Importfile: TStrings;
StrToken: TStrings;
Batchnr:
string;
DateStr:
string;
Format:
string;
Creationdate: TDateTime;
begin
Importfile := TStringList.Create;
StrToken := TStringList.Create;
Importfile.LoadFromFile(Filename);
// Damit das ganze uebersichtlicher wird, werden
// alle Leerzeilen entfernt und Tabulatoren zu Space ' ' gewandelt
for I := Importfile.Count - 1
downto 0
do
begin
Importfile.Strings[I] := ChangeChars(Importfile.Strings[I], #9, #32);
if Trim(Importfile.Strings[I]) = '
'
then
Importfile.Delete(I);
end;
// Batchnummer und Datum der Datei holen
Batchnr := Trim(Copy(Importfile.Strings[0], Pos('
Batch-Nr.', Importfile.Strings[0]) + 10,
Pos('
Datum:', Importfile.Strings[0]) - (Pos('
Batch-Nr.', Importfile.Strings[0]) + 10)));
DateStr := Trim(Copy(Importfile.Strings[0], Pos('
Datum:', Importfile.Strings[0]) + 7, 10));
Format := Trim(Copy(Importfile.Strings[0], Pos('
Papier:', Importfile.Strings[0]) + 8, 10));
Creationdate := StrToDate(DateStr);
// Datei zeilenweise zerlegen
for I := 3
to Importfile.Count - 1
do
begin
StringPickToPieces(Importfile.Strings[I], '
', StrToken);
gauge1.maxvalue := zquery.FieldCount;
gauge1.Visible:= True;
ZQuery.Insert;
// Datei in Appendmodus setzen
with ZQuery
do
begin
// Daten aus dem Header
FieldByName('
datum').AsDateTime := Creationdate;
FieldByName('
batchnummer').AsString := Batchnr;
// Hier kommen die Daten
FieldByName('
lfdnr').AsInteger := StrToInt(StrToken.Strings[0]);
FieldByName('
auftrags_nr').AsInteger := StrToInt(StrToken.Strings[1]);
FieldByName('
kunden_nr').AsInteger := StrToInt(StrToken.Strings[2]);
FieldByName('
anzahl_bilder').AsInteger := StrToInt(StrToken.Strings[3]);
FieldByName('
summe').AsInteger := StrToInt(StrToken.Strings[4]);
FieldByName('
type').AsString := StrToken.Strings[5];
FieldByName('
uhrzeit').AsDateTime := StrToTime(StrToken.Strings[6]);
gauge1.progress := gauge1.progress + 1;
end;
ZQuery.Post;
// Satz schreiben
end;
gauge1.progress := 0;
gauge1.Visible:= false;
Importfile.Free;
StrToken.Free;
end;
//-----------------------------------------------------------------------//
//#######################################################################//
//## Procedure Processing: ##//
//#######################################################################//
//## Datum: Änderung: ##//
//## ====== ========= ##//
//## 08.10.2003 Initial Release ##//
//#######################################################################//
procedure TForm1.Processing;
var
Files: TStrings;
I, J: Integer;
begin
Busy := True;
// jetzt sind wir ersteinmal beschäftigt
StringMsgToFile('
Das Ereignis wurde ausgelöst.');
Files := TStringList.Create;
// Dateiliste kreieren
// MySQL Tabelle öffnen
ZQuery.Open;
// Die zu importierenden Dateien verarbeiten;
for I := 0
to ImportFiles.Count - 1
do
begin
SHMoveFile2(0, AddBackSlash(SourceDir) + ImportFiles.Strings[I],
CacheDir);
Files.Clear;
Sleep(5000);
GetFilesInDirectory(AddBackSlash(CacheDir), ImportFiles.Strings[I], Files, False);
StringMsgToFile('
Es wurden ' + IntToStr(Files.Count) + '
Dateien zum verarbeiten gefunden.');
for J := 0
to Files.Count - 1
do
begin
ProcessFile(Files.Strings[J]);
end;
SHMoveFile(0, AddBackSlash(CacheDir) + ImportFiles.Strings[I],
DestinationDir);
end;
// MySql Tabelle schliessen
ZQuery.Close;
Files.Free;
// Dateiliste freigeben
StringMsgToFile('
Das Ereignis wurde beendet.');
RunTime := GetNetxRunTime;
// Nächste Laufzeit ermitteln
Busy := False;
// wir sind wieder für alles offen
end;
//-----------------------------------------------------------------------//
//#######################################################################//
//## Procedure StringPickToPieces: ##//
//#######################################################################//
//## Datum: Änderung: ##//
//## ====== ========= ##//
//## 08.10.2003 Initial Release ##//
//#######################################################################//
procedure TForm1.StringPickToPieces(Str: AnsiString;
Separator: Char;
Strings: TStrings);
var
TmpStr:
string;
begin
try
Strings.Clear;
// Stringliste löschen
while AnsiPos(Separator, Str) > 0
do // solange es noch einen Separator gibt
begin
TmpStr := Copy(Str, 1, AnsiPos(Separator, Str) - 1);
if Trim(TmpStr) <> '
'
then
Strings.Add(TmpStr);
// Token in der Stringliste sichern
Str := Copy(Str, AnsiPos(Separator, Str) + 1, Length(Str));
// String um das Token mit Separator kürzen
end;
if Trim(Str) <> '
'
then
Strings.Add(Str);
// und das letzte Token auch mitnehmen
except
// hier könnte auch noch was gemacht werden
end;
end;