• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 234
  • Last Modified:

Appending data to existing file

Appending data to existing file

var

C : String;
D : String;
F : Textfile

begin

C := #$3A+#$3B
D := #$00+#$2A

AssignFile (F, 'mama.txt');
Rewrite(F);
Writeln(F, C);
CloseFile(F);

AssignFile (F, 'mama.txt');
Append(F);
Writeln(F, D);
CloseFile(F);

end;

Every time you append to the 'mama.txt' file it tends to add a #$0D+#$0A which is exactly the same as #$0D, #$0A
From my knowledge its seems to be a [Ctrl+Z] in hex form
Does anyone know how to get rid of that extra #$0D+#$0A so that everything I append to a file is in continous line or continous string.

Ive tried this way

Assignfile (F, 'mama.txt');
Rewrite (F);
Writeln(F, C);
Writeln(F, D);

but it adds a [ASCII 26] which is not what I want

This is the extract from the Delphi Help Manual documenting the Append procedure

'If a Ctrl+Z (ASCII 26) is present in the last 128-byte block of the file, the current file position is set so that the next character added to the file overwrites the first Ctrl+Z in the block. In this way, text can be appended to a file that terminates with a Ctrl+Z.'

does anyone know how to overcome this problem?
0
Ben_iti
Asked:
Ben_iti
  • 2
  • 2
  • 2
  • +2
1 Solution
 
kretzschmarCommented:
hi ben,

writeln appends alraedy$0D$0A
use write instead

#26 is allways added as file-end flag for a textfile, you can't get rid of it, if your filetyp is text.

meikl
0
 
ECollinCommented:
Hi,

You can use Write instead of WriteLn.
Writeln adds the $0D,$0A at the end of the line.

Emmanuel
0
 
simonetCommented:

$D + $A  is the End-Of-Line marker. It's what makes the next character appear in the next line of the text file.

$D = CR = carriage return -> Makes the insertion point move to the beginning of the line.
$A = LF = Line feed -> Makes the insertion point move to the next line.

If you want your entire text to appear in a single line, then you can replace the WRITELN() function for WRITE() safely. Otherwise, if each entry is to appear on a different line of text, then you must keep the WRITELN() function.

Yours,

Alex
0
Learn to develop an Android App

Want to increase your earning potential in 2018? Pad your resume with app building experience. Learn how with this hands-on course.

 
sauliteCommented:
If you don't want #$0D+#$0A in every record, you must use

  write(F,C);
  write(F,D);

Instead of writeLN. It's because writeLN adds $0D+$0A, bur write - don't
0
 
kretzschmarCommented:
saulite, do you think that it is fair to repaet comments as answer?

i recommend that you withdraw your answer
0
 
Ben_itiAuthor Commented:
im sorry but im going to have to unaccept your answer
thanks

Ben
0
 
Ben_itiAuthor Commented:
Congratulations Alex

The points go to you
Your answer included further documentation on the subject.

Thanks

Ben
0
 
simonetCommented:
Thanks Ben. Good luck!

Alex
0

Featured Post

[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

  • 2
  • 2
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now