Files |
How to declare a file
The first thing you need to know about files is how to declare them in pascal. A
file is declared similarly to any other variable like so...
A D V E R T I S E M E N T
var
< file variable > : file of < type >
...
The type in the declaration will by any of the predefined types or one
of your types that you have defined in the type section. The most common
type to use is a record which you have declared. This means that the file will
store records of that type. e.g. You could have a file containing entries of
type person which would have attributes like name, address, phone etc..
Assign
This is where you give the file variable that you have declared an associated
file name. It works like so:--
assign (<file variable>,<file name>);.
Now your file variable points to a real file on the drive. This is where all the
information will be written to. Now you must open your file. Two ways of opening
a file are explained below.
Rewrite
If the file name you have assigned to your file variable does not actually exist
on disk then Rewrite will create it for you. What rewrite does, is clear the
file so you can write to it. NOTE: You are not able to read from the file
when using rewrite. Rewrite is used like this:--
rewrite (<file variable>);
Easy! Now you can write to the file.
Reset
This is a mode where you can both read and write to the file. This is the
main mode that you should use in your programs. Sometimes a trick if you want to
create a file and have it open for reading and writing is to create the file
with rewrite and then use reset on the file. Reset works like so:--
reset (<file variable>);
Close
The close command closes a file. (as if you hadn't guessed). You need to
do this at the end of your program because it saves the changes to the file. To
close a file you write :--
close (<file variable>);
Writing records to a file
Writing records to a file is VERY easy. For the examples coming up we will be
using the following record type.
type
personType = record
name : string[30];
address : string[60];
phone : string[7];
end;
Now lets say that you have taken input from the user and have all of the
values of a person variable. Now you want to write it to the file right?
To do this you use the write statement. You should notice that this is
the same command that is used for writing to the screen. Well, writing to a file
is not much different. All you need to do is the following...
write (<file variable>,person);
You can write as many records to the file as you like now :)
Reading records from a file
To read records from a file you need to use the read statement. This is
how you do it:--
read (<file variable>,person);
This reads from the file into your record. When you next execute this statement
you will read the next record from the file into your record variable. This is
because once you have done a read statement the file pointer is moved along to
the next record in the file for your convenience. :)
Seek
The seek command is to go to a certain record in the file. The file starts at 0
so to be at the first record you need to go
seek (<file variable>,0).
To be past the last record at a place where you can add records to the end of
the file you will need to go...
seek (<file variable>,filesize(<file variable>));
In the above example filesize returns the number of records in the file.
But since the records are number from zero up, the seek command goes to the next
record after the last record entered, ie the end of the file.
Truncate
The truncate command deletes all the records in the file that lie after the
current file position. So to delete the last record from the file you will have
to go...
seek (<file variable>,filesize(<file variable>)-1);
truncate (<file variable>);
Deleting a record from a file
The simplest way to do this is to go to the last record in the file, read that
record into a variable, then go to the record you want to delete and over-write
this with the variable that contains the last record's information. Once you
have done this you go back to the last record and use truncate to remove
it from the end. Now you have deleted a file. The example program below contains
a delete procedure if you want to see this in code.
program Example;
uses Crt;
type
personType = record
name : string[30];
address : string[60];
phone : string[7];
end;
var
personFile : file of person;
procedure Openfile;
begin
assign (personFile,'person.dat');
reset (personFile); {This assumes the file already exists}
end;procedure writeToFile;
var person : personType;
begin
with person do
begin
write ('NAME: '); readln(name);
write ('ADDRESS: '); readln(address);
write ('PHONE: '); readln (phone);
end;write (personFile,person);
end;procedure readFromFile;
var
person : personType;
begin
while not eof(personFile) do
begin
clrscr; read (personFile,person);
with person do
begin
writeln ('NAME: ',name);
writeln ('ADDRESS: ',address);
writeln ('PHONE: ',phone);
end;
readKey; {waits for a key to be pressed}
end;
end;procedure deleteRecord;
var
i : integer;
person : personType;
begin
write ('What record number would you like to delete? ');
readln (i);
seek (personFile,i);
if eof(personFile) then exit;
{The above line checks if 'i' is bigger than or equal to the file size}
{After all, you can't delete a record that doesn't exist!}seek (personFile,fileSize(personFile)-1);
read (personFile,person);
seek (personFile,i);
write (personFile,person);
seek (personFile,fileSize(personFile)-1);
truncate (personFile);
end;begin
<Main program code here>
close(personFile);
|