- •Содержание
- •Раздел 1.Подпрограммы Общие сведения
- •Процедуры Описание процедур
- •Вызов процедур
- •Процедуры без параметров
- •Процедуры с параметрами
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры-переменные без типа
- •Параметры процедурного типа
- •Использование производных типов в качестве параметров подпрограмм
- •Принцип локализации имен
- •Функции Описание функций
- •Вызов функции
- •Рекурсивные подпрограммы
- •Директивы
- •Библиотечные модули пользователя Общие сведения
- •Структура модуля Unit
- •Особенности работы с модулями
- •Подключение к программе внешнего файла
- •Раздел 2.Простейший ввод-вывод Процедуры ввода из стандартного текстового файла Input
- •248 15 4 70 Значения 1-й строки
- •11 Значения 2-й строки
- •Процедуры вывода в стандартный текстовый файл Output
- •Раздел 3.Записи Структура записи
- •Записи без вариантной части
- •Записи с вариантами
- •Оператор присоединения With
- •Константа-запись
- •Раздел 4.Множества Общие сведения
- •Конструктор множества
- •Задание множественного типа
- •Операции над множествами
- •Ввод / вывод значения множественной переменной
- •Типизованные константы-множества
- •Раздел 5.Файлы Общие сведения
- •Процедура Assign
- •Файлы с типом
- •Процедура Assign
- •Процедура Rewrite (f)
- •Процедура Write (f, v1 [, v2, … , vn])
- •Процедура Reset (f)
- •Процедура Read (f, V [, v2, …, vn])
- •Функция Eof(f)
- •Процедура Seek (f, n)
- •Функция Filepos (f)
- •Функция Filesize(f)
- •Процедура Close (f)
- •Текстовые файлы
- •Процедура Assign (f, Name)
- •Процедура AssignСrt(f)
- •Процедура Append (f)
- •Процедура Rewrite (f)
- •Процедура Reset (f)
- •Процедура Read ([f,] v1 [, v2, …, vn])
- •Процедура Readln [([f] [,] [v1, v2, …, vn])]
- •Процедура Write ([f,] e1 [, e2, …, en])
- •Процедура Writeln([f,][e1,e2, …,en])
- •Процедура Close(f)
- •Процедура SetTextBuf (f, Buf [, Size])
- •Процедура Flush (f)
- •Сравнительная характеристика представления информации в файлах с типом и текстовых файлах
- •I. Представление числовой информации.
- •II. Представление текстовой информации.
- •Файлы без типа
- •Процедуры Reset и Rewrite
- •Процедура Blockread
- •Процедура Blockwrite
- •Проверка операций ввода-вывода
- •Раздел 6.Ссылочный тип (тип указатель) Общие сведения
- •Методы работы с динамическими переменными
- •Процедуры New и Dispose
- •Процедуры Getmem и Freemem
- •Процедуры Mark и Release
- •Раздел 7.Динамические структуры данных Динамические цепочки Структура динамической цепочки
- •Формирование цепочки
- •Поиск элемента в цепочке
- •Удаление элемента из цепочки
- •Вставка элемента в цепочку
- •Линейный однонаправленный список
- •Двунаправленные списки
- •Вставка элемента
- •Создание двунаправленного кольцевого списка с заглавным звеном
- •Удаление элемента
- •Поиск элемента
- •Очереди и стеки
- •Очередь lifo
- •Очередь fifo
- •Общие сведения
- •Способы организации таблиц
- •Однонаправленный список.
- •Однонаправленный список с упорядоченными записями.
- •Однонаправленный список с отдельным хранением текста записи.
- •Представление в виде массива.
- •Двоичное дерево.
- •Двоичные деревья Структура двоичного дерева
- •Построение дерева
- •Поиск записи в дереве
- •Включение записи в дерево
- •Удаление записи из дерева
- •Раздел 8.Оверлеи Общие сведения
- •Правила оформления оверлейных программ
- •Инициализация работы оверлеев
- •Включение администратора оверлеев
- •Обработка ошибок администратора
- •Размещение оверлейного файла в ems-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Процедура Blockwrite
Процедура Blockwrite имеет следующий формат вызова:
Blockwrite (F, Buf, Count [, Result])
Назначение параметров – то же, что и в предыдущей процедуре.
Процедура записывает одну или несколько записей из области памяти, занимаемой переменной Buf (начиная с ее первого байта), в файл F.
Параметр Result возвращает количество полных записанных записей. Если Result меньше Count, то это значит, что диск переполнился до завершения пересылки данных. В этом случае, если параметр Result отсутствует, возникает сообщение об ошибке ввода-вывода.
В остальном описание процедуры Blockwrite аналогично процедуре Blockread.
Пример 5.10.
Программа быстрого копирования файла F1 в файл F2.
Program CopyFile;
Var
F1, F2: File;
Buf: Array [1..2048] Of Char;
Numr, Numw: Word;
Begin
Assign (F1, ‘DATA1’);
Assign (F2, ‘DATA2’);
Reset (F1, 1); {Размер записи при передаче
Rewrite (F2, 1); данных равен одному байту}
Repeat
Blockread (F1, Buf, Sizeof (Buf), Numr);
Blockwrite (F2, Buf, Numr, Numw);
Until (Numr=0) Or (Numr<>Numw); {Закончился файл F1
или переполнился диск
при создании файла F2}
Close (F1);
Close (F2);
End.
Проверка операций ввода-вывода
По умолчанию при выполнении операций ввода-вывода осуществляется их стандартная проверка системными средствами. Для управления проверкой служит опция компилятора {$I} – проверка ввода-вывода, которая по умолчанию включена ({$I+}). При этом, если произошла ошибка ввода-вывода, то выполнение программы прерывается и выдается сообщение о типе ошибки.
Если нежелательно, чтобы выполнение программы прерывалось по ошибке ввода-вывода, то есть если мы сами хотим обрабатывать данные ошибки, необхотимо отключить стандартную проверку ввода-вывода. С этой целью в тексте программы перед теми операциями ввода-вывода, которые программист желает контролировать сам, необходимо отключить стандартную проверку ввода-вывода опцией {$I-}, а после этих операций снова включить ее опцией {$I+}.
Для контроля операций ввода-вывода в состоянии {$I-} служит специальная функция IOResult (без параметров).
Функция IOResult возвращает целочисленное значение типа Word, которое является состоянием последней выполненной операции ввода-вывода. Если ошибки ввода-вывода не было, то функция возвращает значение ноль, в противном случае – код ошибки.
Если опция {$I} находится в состоянии {$I-} и при некоторой операции ввода-вывода произошла ошибка, то последующие операции ввода-вывода, используемые до вызова функции IOResult, будут игнорироваться.
Таким образом, нежелательно использовать один вызов функции IOResult на несколько операций ввода-вывода, так как неясно, в какой из них произошла ошибка.
Вызов функции IOResult очищает свой внутренний флаг ошибки, (возвращаемое значение устанавливается в ноль). Поэтому нельзя повторно считать одно и то же значение IOResult.
Пример 5.11.
Использование функции IOResult для проверки наличия внешнего файла.
Var
F: File Of Char;
Begin
Assign (F, ’PRIMER’);
{$I-}
Reset(F);
{$I+}
If IOResult = 0 Then
Writeln (‘Размер файла:’, Filesize (F), ‘байт’)
Else
Writeln (‘Файл не обнаружен’);
End.