AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Stringlist

Ein Thema von celinaw · begonnen am 9. Jun 2004 · letzter Beitrag vom 11. Jun 2004
Antwort Antwort
Benutzerbild von celinaw
celinaw

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

Hilfe bei Stringlist

  Alt 9. Jun 2004, 23: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
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#2

Re: Hilfe bei Stringlist

  Alt 10. Jun 2004, 09:12
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 FieldByName('batchnummer').AsString := Batchnr; nur folgende Zeile ergänzen: FieldByName('format').AsInteger := StrToInt(Format); .

Kannst es ja mal versuchen.

MfG Pr0g
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

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

Re: Hilfe bei Stringlist

  Alt 10. Jun 2004, 17:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#4

Re: Hilfe bei Stringlist

  Alt 10. Jun 2004, 21:40
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:

Format := Trim(Copy(Importfile.Strings[1], Pos('Papier:', Importfile.Strings[1]) + 8, 10));
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

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

Re: Hilfe bei Stringlist

  Alt 11. Jun 2004, 02:29
Hi PrOg



Klar, das ist die Lösung

Danke für deine Hilfe

Gruß Celina

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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