Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0043234_0ADD1_ayap.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
682.5 Кб
Скачать

Подпрограммы для работы со всеми типами файлов Процедуры

assign(var f; filename : string)

Связывает логический файл f с физическим файлом, имя которого задано в строке filename.

close(var f)

Закрывает открытый логический файл. Вызов процедуры close необходим при завершении работы с файлом, который был открыт для записи, поскольку при ее выполнении происходит выгрузка содержимого буфера.

erase(var f)

Уничтожает физический файл на диске, который был связан с файловой переменной f.

rename(var f; newname : string)

Переименовывает физический файл на диске, связанный с логическим файлом f.

reset(var f)

Открывает логический файл f для последующего чтения данных, то есть открывает входной файл.

rewrite(var f)

Открывает логический файл f для записи данных (открывает выходной файл). Если физический файл, с которым связана переменная f, существовал ранее, он очищается, то есть вся информация из него теряется. Если файл не существовал, он создается.

Функции

eof(var f) : boolean

Возвращает значение true, если при чтении достигнут конец файла.

IOresult : integer

Возвращает целое число, соответствующее коду последней ошибки ввода-вывода. При нормальном завершении операции функция вернет значение 0. Функция IOresult работает только с ключом компиляции {$I-}.

Текстовые файлы

Текстовый файл представляет собой последовательность строк символов переменной длины. Каждая строка заканчивается символами перевода строки и возврата каретки (их коды - 13 и 10). Эти символы вставляются в физический файл при нажатии клавиши Enter. При чтении файла эти символы воспринимаются как разделитель.

Текстовый файл можно открыть не только для чтения или записи с помощью процедур reset и rewrite, но и для добавления информации в конец. Для этого служит процедура append:

append(var f)

Для чтения из файла применяются процедуры:

read(f, список)

readln(f, [список])

Для ввода с клавиатуры определено стандартное имя файла INPUT, а для вывода на экран - OUTPUT. Эти файлы отличаются от обычных тем, что их нельзя открывать и закрывать, поскольку это делается автоматически, и их имена можно не указывать при обращении к процедурам ввода и вывода.

Процедуры записи в текстовый файл:

write(f, список)

writeln(f, [список])

При записи в файл происходит преобразование из внутренней формы представления выводимых величин в символьные строки.

Чтение и запись выполняются последовательно, то есть считать/записать очередной символ можно только после аналогичной операции с предыдущим.

В Паскале есть несколько стандартных подпрограмм, которые предназначены только для работы с текстовыми файлами:

flush(var f : text)

settextbuf(var f : text; var buf; bufsize : word)

seekEof(var f : Text): boolean

seekEoln(var f : text): boolean

Лекция 13

Бестиповые и компонентные файлы

Бестиповые файлы

Бестиповые файлы предназначены для хранения участков оперативной памяти на в нешних носителях. После описания файловой переменной

var имя : file;

ее требуется связать с физическим файлом с помощью процедуры assign. Чтение и запись производится через буфер "порциями", равными размеру буфера. Размер буфера, отличающийся от стандартного (128 байт), можно задать при открытии файла вторым параметром процедур reset и rewrite:

reset(var f : file; bufsize : word)

rewrite(var f : file; bufsize : word)

Размер буфера должен находиться в пределах от 1 до 64K байт.

Собственно чтение и запись выполняются с помощью процедур blockread и blockwrite:

blockread(var f : file; var x; count : word; var num : word);

blockwrite(var f : file; var x; count : word; var num : word);

Процедура blockread считывает в переменную x количество блоков count. Длина блока равна размеру буфера. Значение count должно быть больше или равно 1. Необязательный параметр num возвращает количество прочитанных блоков.

Процедура blockwrite выполняет запись в файл count блоков, начиная с адреса, заданного переменной x. Длина блока равна длине буфера. num возвращает число успешно записанных блоков.

Для бестиповых файлов применяется как последовательный, так и прямой доступ.

Пример #1.

Программа выполняет ввод вещественных чисел из текстового файла и запись их в бестиповой файл блоками по четыре числа.

program create_bfile;

var buf : array[1 .. 4] of real;

f_in : text;

f_out: file;

i, k : integer;

name_in, name_out : string;

begin

{$I-}

writeln('Введите имя входного файла'); readln(name_in);

assign(f_in, name_in);

reset(f_in);

if IOResult <>0 then begin

writeln('Файл ', name_in,' не найден'); exit end;

writeln('Введите имя выходного файла'); readln(name_out);

assign(f_out, name_out);

rewrite(f_out, sizeof(real) * 4);

{$I+}

i := 0;

while not eof(f_in) do begin

inc(i);

read(f_in, buf[i]);

if i = 4 then begin

blockwrite(f_out, buf, 1); i := 0; end;

end;

if i <> 0 then begin

for k := i + 1 to 4 do buf[k] := 0;

blockwrite(f_out, buf, 1);

end;

close(f_in); close(f_out);

end.