Re: Pushing a character back

Posted by webmaster Guido on March 08, 2005

In Reply to: Pushing a character back posted by Joey p12386 on March 07, 2005

: Is it possible using the TextFile type to push a character back?

: What i mean is after i have used Read(F, C) (C is a Char) can i move one place back? So the next character i read will be the value of C again.

Positioning an open file "backwards" is done with Seek(F). However, Seek can not be used for text files, so we'll open the file as a "file of bytes".

var
  F: File of byte;
		
procedure TForm1.btnOpenFileClick(Sender: TObject);
begin
  AssignFile(F, 'c:\test.txt');
  Reset(F);
end;

procedure TForm1.btnReadClick(Sender: TObject);
var
  B: byte;
  Ch: char;
begin
  if not Eof(F) then begin
    Read(F, B);
    Ch := Chr(B); // convert byte to character
    // Do something with the character, e.g.:
    lblChar.Caption := Ch;
  end
  else
    ShowMessage('At end of file');
end;

procedure TForm1.btnBackClick(Sender: TObject);
var
  P: integer;
begin
  { FilePos(F) and Seek(F) can not be used on
  textfiles, only on "typed" files! }
  P := FilePos(F);
  if P > 0 then
    Seek(F, P - 1)
  else
    ShowMessage('Already at beginning of file');
end;

procedure TForm1.btnCloseClick(Sender: TObject);
begin
  CloseFile(F);
end;

Related Articles and Replies


[ Delphi Tutorials -- by DelphiLand ]