Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
№___230105__ МУ_лаб и пр_ОАиП_часть первая.docx
Скачиваний:
4
Добавлен:
26.04.2019
Размер:
383.97 Кб
Скачать

Процедуры Write / WriteLn

Операторы Write и WriteLn предназначены для записи значений из списка вывода в текстовый файл или на экран, если файл не указан (предполагается файл Output). Значения переменных в списке, как и при вводе, могут быть лишь целые, вещественные, символьные и строковые. Сложные структуры данных, такие как массивы, множества, записи, выводятся по элементам, по полям.

Процедура Write выводит данные в текущую строку и не закрывает ее, т.е. следующие данные запишутся в ту же строку. Формально длина строки в текстовом файле не ограничена. Если вывод строки происходит на экран дисплея и длина строки превышает размер экрана, то продолжение печати строки будет происходить с начала следующей строки экрана. Если при выводе достигнут не только горизонтальный, но и вертикальный край экрана, т.е. символ окажется в правом нижнем углу экрана, то произойдет автоматическая прокрутка экрана на одну строку.

Процедура WriteLn выводит данные в текущую строку и закрывает ее, при этом вывод другой строки будет происходить с первой позиции следующей строки. В конец строки дописывается символ конца (#13, объединенный с #10).

Вызов процедуры WriteLn или WriteLn ( f ) без списка вывода переведет курсор на экране в начало следующей строки или создаст пустую строку в файле, содержащую только символ конца строки (#13).

Чтение и запись в компонентном файле

Для компонентных файлов обе процедуры и Reset и Rewrite устанавливают режим «чтение/запись» в соответствии со значением предопределенной системной переменной FileMode (оно по умолчанию равно 2), т.е. независимо от выбора процедуры открытия, файл открывается и для чтения и для записи.

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

Этот порядок нарушится только в том случае, если значение FileMode будет равно 0, что соответствует режиму «чтение», или равно 1, что соответствует режиму «запись».

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

Read ( Var f; Переменные типа содержимого файла )

Процедура чтения очередного компонента из файла f.

Write ( Var f; Переменные типа содержимого файла )

Процедура записи очередного компонента в файл f.

Reset(f);

{ Открываем файл для чтения }

Read (f, V);

{ Читаем из файла f первый элемент в }

{ переменную V }

Read (f, a,b,c,d);

{ Читаем из файла f четыре первых элемента в

{ переменные a, b, c, d }

{ Переменные V, a, b, c, d должны быть }

{ такого же типа, как компонент файла }

Rewrite(f);

{ Открываем файл для записи }

Write (f, V);

{ Пишем в файл f элемент, хранящийся в }

{ переменной V }

Write (f, a,b,c,d);

{ Пишем в файл f четыре элемента, xранящиеся}

{ в переменных a, b, c, d }

{ Переменные V, a, b, c, d должны быть }

{ такого же типа, как компонент файла }

Первым аргументом процедур чтения и записи является формальный файл, предварительно связанный с физическим файлом на диске. Следующими аргументами будут одна или несколько буферных переменных, через которые и происходит «общение» между оперативной памятью и диском.

При создании файла буферная переменная работает как автобус, впускающий пассажиров на остановке: с появление каждого следующего оператора записи Write содержимое файла увеличивается на один компонент

При считывании из файла действие буферной переменной подобно окошку, через которое мы смотрим на файл. Процедуры Read и Reset передвигают его вперед-назад по файлу. Read сдвигает вперед на один элемент, Reset - в начало файла.

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

Типизированные файлы имеют более строгую структуру хранения данных, нежели текстовые. При записи в них записывается машинное представление компонента. Компоненты ничем не разделены, и переход от одного компонента к другому осуществляется легко благодаря тому, что тип компонента, а значит и его размер (в байтах), жестко определен.

В типизированном файле нет понятия (символа) конца строки или конца файла, как в текстовом файле, поэтому для записи или чтения не имеют смысла процедуры WriteLn и ReadLn

Их использование приведет к ошибке

Типизированный файл, компонентом которого является символ: File Of Char не одно и то же, что текстовый файл типа Text, т.к. не содержит управляющих символов и символа конца файла

Типизированный файл, компонентом которого является строка: File Of String [ 30 ] также не похож на текстовый файл, т.к. даже если строки будут содержать меньше, чем 30 символов, все равно для каждой выделится память в 31 байт (30 - на хранение символов строки и 1 - на хранение ее истинной длины). Часть строки будет заполнено нужными символами, в остальной части будет «мусор».

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