
- •Алфавит и лексемы
- •Константы
- •Имена, ключевые слова и знаки операций
- •Ввод с клавиатуры
- •Вывод на экран
- •Условный оператор if
- •Оператор варианта case
- •Цикл с предусловием while
- •Цикл с постусловием repeat
- •Цикл с параметром for
- •Рекомендации по использованию циклов
- •Оператор перехода goto
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Двумерные массивы
- •Операции
- •Процедуры и функции для работы со строками
- •Множества
- •Операции над множествами
- •Подпрограммы для работы со всеми типами файлов Процедуры
- •Функции
- •Текстовые файлы
- •Бестиповые файлы
- •Компонентные файлы
- •Прямой доступ
- •Процедуры
- •Функции
- •Глобальные и локальные переменные
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Нетипизированные параметры
- •Открытые массивы и строки
- •Рекурсивные подпрограммы
- •Описание модулей
- •Использование модулей
- •Модуль System
- •Модуль Crt
- •Работа с экраном
- •Работа с клавиатурой
- •Модули Dos и WinDos
- •Модуль Graph
- •Структура графической программы
- •Модуль Strings
Подпрограммы для работы со всеми типами файлов Процедуры
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.
|