Стандартные средства обработки файлов.
Процедура
Assign (ff, name);
- связывает файловую переменную ff с файлом на носителе, имя которого указано в name.
Name: string - в этой переменной хранится имя файла, а если необходимо и "путь".(не более79 символов)
В дальнейшем, в программе, при обращении к файлу используют только файловую переменную ff, имя файла более не используют.
…
var
ff: file of integer;
name: string [14];
begin
name: = 'test.dat';
assign (ff, name);
Можно задать имя файла в явном виде, указав путь:
Assign (ff, 'a:\test.dat');
Эта процедура выполняется только для закрытых файлов.
Перед выполнением операций чтения или записи информации в файлы, они должны быть открыты следующими процедурами:
reset и rewrite.
Rewrite (ff);
- создает новый файл, имя которого указано в assign (ff, name), т.е. с именем, хранящимся в строковой переменной name.
Если файл с таким именем уже существует, его содержимое стирается. Создается новый пустой файл.
Указатель - находится в начале файла.
Reset(ff);
- открывает уже существующий файл с именем, указанным в assign. Файл доступен и для записи и для чтения.
Указатель - в начале файла.
Если файл отсутствует можно выключить директивы компилятора
{$I-}.
Функция IOResult - вырабатывает 0 если операция успешна.
Процедура
Close (ff);
- закрывает открытый ранее файл, имя которого было связано с файловой переменной ff через assign.
Во избежании потери или порчи информации, все открытые файлы в конце программы должны быть закрыты.
Функция
Eof (ff);
- при чтении информации из файла, вырабатывает два значения:
TRUE - если прочитана последняя запись, указатель находится за последним элементом файла;
FALSE - в противном случае.
Процедура
Read (ff, x);
- служит для чтения информации из файла, причем файл уже должен быть открыт с помощью
reset или rewrite.
ff - файловая переменная.
x - переменная того же типа, что и компоненты файла.
Процедура
Write(ff, x);
- служит для записи информации в файле (файл открыт через reset или rewrite).
ff - файловая переменная.
Процедура
Seek (ff, n);
- перемещает указатель в файле на элемент с номером n.
ff - файловая переменная;
n: longint.
Процедура
Truncate (ff);
- удаляет часть файла от текущей позиции указателя до конца.
Указатель устанавливается на конец файла.
Функция
Filepos (ff);
- возвращает номер текущей позиции указателя в файле (нумеруется от 0).
Filesize (ff);
возвращает текущий размер файла (число элементов файла начинается с 1).
Задача: создать файл, компоненты которого целые числа. Составить программу подсчета количественно отрицательных компонент файла.
Prgram prim;
uses ctr
var
ff: file of integer;
n, i, x, p: integer
begin
clrscr;
assign (ff, ‘pr.dat’);
Создание файла:
rewrite (ff); - создать новый файл pr.dat
read (n);
for i:= to n do
begin
read (x); - ввод значений
write (ff, x); - запись в файл
end;
Обработка:
reset (ff); - открыть уже существующий файл
repeat
read (ff, x); - читать из файла
if x<0 then p: =p + 1;
until eof (ff); - пока не конец файла
writeln (p);
close(ff); - закрыть файл
end.
ff – файловая переменная.
Создается файл pr.dat – содержит целые числа. Затем подсчитывается в р количество отрицательных компонент файла. Цикл продолжается, пока функция eof (ff) = TRUE, т.е. указатель после последней компоненты файла, т.е. прочитаны все компоненты файла. В текущем каталоге – появляется файл данных pr.dat.
Задача: (на базе предыдущей). Создать новый файл, содержащий только положительные компоненты файла pr.dat.
Program pr1;
var
ff: file of integer;
gg: file of integer;
x: integer;
begin
assign (ff, ‘pr.dat’);
assign (gg, ‘pr1.dat’);
reset (ff); - открыть существующий файл.
rewrite (gg); - создать новый pr1.dat
repeat
read (ff, x); - чтение из файла pr.dat
if x>0 then write (gg, x); - запись в файл pr1.dat
until eof (ff);
reset (gg); - переместить указатель в pr1.dat на начало
repeat
write (gg, x); - чтение из файла
writeln (x); - печать на экран
until eof (gg);
writeln (‘количество положенных элементов - ’, filesize (gg));
¯
количество компонент в новом файле pr1.dat
Закрыть оба файла:
close (ff);
сlose (gg);
end.
Задача: создать файл “Фирма” со структурой каждой записи:
Ф.И.О. |
Год рождения |
Стаж |
Оклад |
В программе предусмотреть возможность добавления записей в файл.
Program pr;
uses crt;
type
firma = record
sur: string [20];
gr, st, or: integer;
end;
var
ff: file of firma; ¬ (файловая переменная)
bf: firma; (буфер)
k: char;
begin
clrscr;
assign (ff, ‘firma. dat’);
write (‘создатьновый файл – Y, добавить в существующий - N’);
readln (k);
if k = ’Y’ then
rewrite (ff) (создать новый)
else
begin
reset (ff); (открыть существующий)
seek (ff, filesize(ff)); (указатель на конец файла)
end;
repeat
write (‘будете вводить – Y/N’); readln(k);
if k = ‘Y’ then
with bf do begin
Ввод с клавиатуры:
readln (sur); readln (g);
readln (st); readln (ok);
write (ff, bf); (запись в файл)
end;
until k = ‘N’;
close(ff);
end.
Задача: используя файл “Фирма” изменить (повысить) оклады сотрудникаим не старше 40 лет со стажем более 10 лет на 25%.
Sur – Ф.И.О., g – год рождения, st – стаж, ok – оклад.
Program pr;
type
firma = record
sur: string [20];
g, st: integer;
ok: real;
end;
var
ff: file of firma;
bf: firma;
begin
assign (ff, ‘firma.dat’);
reset (ff);
repeat
read (ff, bf);
if (1998-bf.g<40) and
(bf.st>10) then
begin
seek (ff, (filepos(ff) – 1));
bf, ok: bf.ok + bf.ok 14;
write (ff, bf); ¬ (записать запись на старое место в файле с новым окладом)
end;
until eof (ff);
reset (ff);
repeat
read (ff, bf);
writeln (bf.sur); writeln (bf.ok); ¬(распечатывается список сотрудников и их окладов)
until eof (ff);
close (ff);
end.