Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi WriteLn hackt letzte Zeile ab (https://www.delphipraxis.net/161651-writeln-hackt-letzte-zeile-ab.html)

rokli 14. Jul 2011 10:24

Delphi-Version: 2009

WriteLn hackt letzte Zeile ab
 
Moin zusammen!

Um eine Text-Datei von A nach B zu kopieren, und dabei u. U. den Inhalt zu manipulieren, verwende ich das folgende Coding:

Delphi-Quellcode:
      AssignFile(txtQ, strQuelle + libFiles.Items[intHelp]);
      Reset(txtQ);
      AssignFile(txtZ, strZiel + libFiles.Items[intHelp]);
      ReWrite(txtZ);
      // 1. Kopieren und evtl. Konvertieren
      while not Eof(txtQ) do begin
         ReadLn(txtQ, strLine);
         if strConvert = 'true' then begin
            strLine   := dvbk_ConvANSItoDOS(strLine);
         end;
         strLine      :=   f_SonderZ(strLine);
         WriteLn(txtZ, strLine);
      end;
Bei der Konvertierung wird in Abhängigkeit von strConvert = true die Zeile von ANSI (Quelle = IBM) nach DOS (MS-DOS 6.2) umgewandelt. Immer werden Sonderzeichen mit f_SonderZ ersetzt. Das nur zur Erklärung der beiden Funktionen - mit meinem Problem hat das nichts zu tun.

Mein Problem liegt da, dass am Ende der Zieldatei immer ein paar Byte fehlen. Die 1000 Sätze werden korrekt von der Quelldatei (txtQ) nach Zieldatei (txtZ) übertragen, nur in der letzten Zeilen fehlen immer ein paar Stellen. Die Satzlänge beträgt übrigen 1.623 Byte.

Ich habe schon versucht, nach dem Kopieren noch eine Leerzeile anzuhängen, das hat aber leider nichts gebracht.

Kennt jemand das Verhalten und hat einen Tipp, was ich tuen kann?

Viele Grüße :hi:
Rolf

Luckie 14. Jul 2011 10:41

AW: WriteLn hackt letzte Zeile ab
 
Lass mal aller Funktionen weg. Schreib und lese die Datei nur. Wenn da alles klappt, liegt es an deinen Funktionen, die du zwischendurch áufrufst.

gammatester 14. Jul 2011 10:47

AW: WriteLn hackt letzte Zeile ab
 
Das Verhalten tritt auf, wenn man
Delphi-Quellcode:
Closefile(txtZ);
vergißt.

rokli 14. Jul 2011 10:50

AW: WriteLn hackt letzte Zeile ab
 
Liste der Anhänge anzeigen (Anzahl: 1)
... tja es wurde dadurch nicht besser....

Auffällig ist, dass am Ende kein Return steht (siehe Bild).

Wenn ich ein CR LF dran hänge, dann fehlen mir <009> am Ende der Datei :?:

CloseFilge(txtZ) kommt später, da ich die Quelldatei noch in eine (Archiv) Datei kopieren will, und anschließend die Quelle löschen muss.

Aber ich hol den Close mal nach oben!

rokli 14. Jul 2011 10:53

AW: WriteLn hackt letzte Zeile ab
 
gammatester - Du bist ein ganz Großer! :thumb:

Delphi-Quellcode:
   for intHelp := 0 to libFiles.Count - 1 do begin
      AssignFile(txtQ, strQuelle + libFiles.Items[intHelp]);
      Reset(txtQ);
      AssignFile(txtZ, strZiel + libFiles.Items[intHelp]);
      ReWrite(txtZ);
      // 1. Kopieren und evtl. Konvertieren
      while not Eof(txtQ) do begin
         ReadLn(txtQ, strLine);
{         if strConvert = 'true' then begin
            strLine   := dvbk_ConvANSItoDOS(strLine);
         end;
         strLine      :=   f_SonderZ(strLine);}
         WriteLn(txtZ, strLine);
      end;
      CloseFile(txtZ);

      // 2. Sichern
      if strArchiv <> '' then begin
jetzt funzt es!

TKS euch Beiden!!

Grüße
Rolf


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