Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 153

while not EOF( f ) do Read( f, ... );

остановится только после полного истощения файла, даже если

- 238 -

последние 1024 строк его были пустыми. Если переписать цикл в виде

while not SeekEOF( f ) do Read( f, ... );

он станет работать более эффективно.

Как и SeekEOLn, функция SeekEOF применима только к открытым для чтения текстовым файлам.

12.6.2. Операции ввода-вывода в текстовые файлы


Ввод и вывод числовой и текстовой информации в Турбо Паскале осуществляется операторами:

ввод – Read( f, X ) или Read( f, X1,X2,...,Xn ) и

ReadLn( f, X ) или ReadLn( f, X1,X2,…,Xn );

вывод – Write( f, X ) или Write( f, X1,X2,…Xn ) и

WriteLn( f, X ) или WriteLn( f, X1, X2,…,Xn ).

Если в операторе ввода-вывода первым параметром стоит логическое имя файла, то это означает, что поток данных будет приниматься (Read) или направляться (Write) на конкретное физическое устройство компьютера, связанное в данный момент с логическим именем этого файла.

Если операторы содержат один лишь список ввода-вывода, то считается, что ввод сопряжен со стандартным логическим файлом Input (под ним подразумевается клавиатура с «эхом» ввода на экране), а вывод — с логическим файлом Output (что соответствует выводу на экран дисплея).

Имена Input и Output являются предопределенными в системной библиотеке (модуле System). Напомним, что в стандартном Паскале любая программа, использующая ввод-вывод, должна начинаться со слов

PROGRAM имя( Input, Output);

что, по сути, открывает каналы ввода-вывода. В Турбо Паскале можно смело опускать описание PROGRAM и не надо описывать имена Input и Output.

Таким образом, оператор Read( x1, x2) полностью эквивалентен оператору Read( Input, x1, x2 ), а оператор Write( х3, х4) — оператору Write( Output, х3, х4 ).

12.6.2.1. Операторы Read/ReadLn. Рассмотрим сначала операторы ввода информации — Read и ReadLn. Их аргументами должен быть список переменных, значения которых будут считаны (введены). Тип переменных при вводе из текстового файла (в том числе и

- 239 -

с клавиатуры) может быть только целым, вещественным, символьным (Char), строковым или совместимым с ними. Сложные структурированные типы (такие, как массивы, множества, записи и др.) могут быть введены только по элементам (по полям для записей). Например:


| VAR

| i : Word

| l : Longint;

| r : Real;

| Rec RECORD { запись }

| x, у : Real

| ch : Char

| END;

| Dim : Array [0...99] of Byte; { массив }

| S : String;

| BEGIN

{ . . . ЧИТАЮТСЯ С КЛАВИАТУРЫ: . . . }

| Read( i, l); { два целых числа,}

| Read( l, r, s); { целое, вещественное число и строка,}

| Read( Rec.x, Rec.у, Rec.ch ); { запись по полям,}