Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Hilfe bei Stringlist (https://www.delphipraxis.net/23796-hilfe-bei-stringlist.html)

celinaw 9. Jun 2004 23:50


Hilfe bei Stringlist
 
Liste der Anhänge anzeigen (Anzahl: 1)
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 :gruebel:
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

Pr0g 10. Jun 2004 09:12

Re: Hilfe bei Stringlist
 
Den Wert hinter "Papier" scheinst du ja schon in die Variable "Format" zu schreiben. Ich kenne mich mit der SQL-Komponente zwar nicht aus, doch wenn der Wert genauso wie bspw. "Batch-Nr.", oder "Datum" gespeichert werden soll, dann müsstest du unter
Delphi-Quellcode:
FieldByName('batchnummer').AsString := Batchnr;
nur folgende Zeile ergänzen:
Delphi-Quellcode:
FieldByName('format').AsInteger := StrToInt(Format);
.

Kannst es ja mal versuchen.

MfG Pr0g

celinaw 10. Jun 2004 17:39

Re: Hilfe bei Stringlist
 
Hi PrOg

Ja das ist auf jedenfall richtig. Aber hier...

Delphi-Quellcode:
// 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);
muss auch noch was gemacht werden, das er den Wert überhaupt erst mal aus der Datei holt!?
Folgendes Funktioniert jedenfalls nicht. Das habe ich in den Code geschrieben, weil ich dachte das es so gehen müsste.


Delphi-Quellcode:


  Format := Trim(Copy(Importfile.Strings[0], Pos('Papier:', Importfile.Strings[0]) + 8, 10));

  Creationdate := StrToDate(DateStr);
Gruß Celina

Pr0g 10. Jun 2004 21:40

Re: Hilfe bei Stringlist
 
Die Formatangabe, also die Zahl hinter "Papier" befindet sich eine Zeile unter den anderen Werten, hat also nich den Index "0", sondern "1". Der Code müsste also so aussehen:

Delphi-Quellcode:
Format := Trim(Copy(Importfile.Strings[1], Pos('Papier:', Importfile.Strings[1]) + 8, 10));

celinaw 11. Jun 2004 02:29

Re: Hilfe bei Stringlist
 
Hi PrOg

:shock: :oops: :oops: :oops:

Klar, das ist die Lösung :mrgreen: :thuimb:

Danke für deine Hilfe

Gruß Celina

:coder:


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