Einzelnen Beitrag anzeigen

Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#1

Hilfe bei Stringlist

  Alt 10. Jun 2004, 00:50
Hi

Foldender Code Importiert den Inhalt von Textdateien in eine SQL Datenbank.
Der Code stammt von Duffy. Habe ihn nur etwas angepasst. Es funktionier auch alles. Allerdings hat sich nun der Aufbau der Textdatei um eine zusätliche Angabe erweitert. "Papier: xx".
Ich habe mal die alte und neue Datei angehängt.

Was muss ich jetzt im Code ändern, damit es wieder funktioniert
In der SQL Tabelle habe eine weiter Spalte angelegt mit dem Namen "Format". Hier soll dann die Zahl hinein die hinter Papier steht.

Hier mal ein stück von dem Code:


Delphi-Quellcode:


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;
Kann mir da jemand bei helfen?


Gruß Celina
Angehängte Dateien
Dateityp: zip dateien.zip (2,2 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat