File Handling In Pascal

From Free Pascal wiki
Revision as of 00:13, 20 August 2010 by Cjaster (talk | contribs) (→‎Example)
Jump to navigationJump to search

File handling

Something most programmers need to know how to do is work with files. Files can be used to save user settings, error logs, and more. Here i am going to teach you how to work with basic text files.

About files

When using files in pascal, you can use a TextFile type, which allows you to write string into the file or create your own file type.

<Delphi> ... Type

TIFile = File Of Integer;//Allows you to write Integers into the file
TCFile = File Of PChar;//Write PChars into the file :\
TFile = File Of String;//Write Strings into the file

... </Delphi>

If we only did TFile = File, then it would be impossible to write anything into it! Also, you cannot write integers directly into TFile, because it is a file of strings. Better use the filetype TextFile for writing values of different types.

IO

IO is the file handling thingy for pascal. It is used for getting errors. Since it is a compiler directive, you have to do this: <Delphi> {$I-}//Turn off checking. This way all errors go into the IOResult variable {$I+}//Turn it back on </Delphi>

By disabling (Turning off) IO it all goes into the IOResult variable. This is an cardinal type(Numbers). So, if you want to write it, you have to use the InttoStr function. Different numbers mean different errors. So you may want to check here for the different errors: [1]

File procedures

There are three file procedures you really need to know about

Rewrite - Is used for creating files

Append - Opens an existing file for editing it

Reset - Opens a file for reading it

Example

A full example of handling a text file of type TextFile:

<Delphi> Program FileTest;

{$mode objfpc} //Do not forget this ever

Var

FileVar:TextFile;

begin

 Writeln('File Test');
 AssignFile(FileVar,'Test.txt'); // you do not have to put .txt but this is just for now
 {$I-}
 Try
 Rewrite(FileVar);  // creating the file
 Writeln(FileVar,'Hello');
 Except
 Writeln('ERROR! IORESULT: '+InttoStr(IOResult);
 End;
 CloseFile(FileVar);
 Readln;

end. </Delphi>

Now open the file in any text editor and you will see Hello written to it!

Heres appending to a file(Editing it)

<Delphi> Program EditFile;

Var

File1:TextFile;

begin

 Writeln('Append file');
 AssignFile(File1,'File.txt');
 {$I-}
 Try
 Append(File1,'Some Text');
 Except
 Writeln('ERROR IORESULT:'+IntToStr(IOResult));
 End;
 {$I+}
 CloseFile(File1);
 Readln;

end. </Delphi>

Reading a file:

<Delphi> Program ReadFile;

Var

File1:TextFile;
Str:String;

begin

 Writeln('File Reading:');
 AssignFile(File1,'File,txt');
 {$I-}
 Try
 Reset(File1);
 Repeat
 Readln(File1,Str);//Reads the whole line from the file
 Writeln(Str);//Writes the line read
 Until(EOF(File1));EOF(End Of File) The the program will keep reading new lines until there is none.
 Except
 Writeln('ERROR IORESULT:'+IntToStr(IOResult));
 end;
 {$I+}
 CloseFile(File1);
 Readln;

end. </Delphi>

It is possible to do some file handling using chars instead of strings. This makes it look cool :D.

Other file procedures

The SysUtils and some other units have procedures for making text files. [2]

OOP

Creating TextFiles in OOP (Object Orientated Pascal) is simple and fast. Mainly because most objects have a SaveToFile procedure.

The usage is similar to that of a TStringList:

<Delphi> Var

Str:TStringList;

begin

 Str := TStringList.Create;
 Str.Add('Hello');
 Str.SaveToFile(<File Path Here>);

end; </Delphi>

I hope this is helpful :D And if anything is wrong or I left something out. Edit At Will!