AGB  ·  Datenschutz  ·  Impressum  







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

WriteLn hackt letzte Zeile ab

Ein Thema von rokli · begonnen am 14. Jul 2011 · letzter Beitrag vom 14. Jul 2011
Antwort Antwort
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#1

WriteLn hackt letzte Zeile ab

  Alt 14. Jul 2011, 11:24
Delphi-Version: 2009
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 = 'truethen 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
Rolf
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: WriteLn hackt letzte Zeile ab

  Alt 14. Jul 2011, 11:41
Lass mal aller Funktionen weg. Schreib und lese die Datei nur. Wenn da alles klappt, liegt es an deinen Funktionen, die du zwischendurch áufrufst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

AW: WriteLn hackt letzte Zeile ab

  Alt 14. Jul 2011, 11:47
Das Verhalten tritt auf, wenn man Closefile(txtZ); vergißt.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: WriteLn hackt letzte Zeile ab

  Alt 14. Jul 2011, 11:50
... 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!
Miniaturansicht angehängter Grafiken
2011-07-14_114622.jpg  
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: WriteLn hackt letzte Zeile ab

  Alt 14. Jul 2011, 11:53
gammatester - Du bist ein ganz Großer!

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
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  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 20:29 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