Чтение из текстового файла

Чтение из файла выполняется хорошо знакомым нам оператором READ.

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

Read(<Имя файловой переменной>, <Список ввода>);

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

Если перед списком ввода в операторе READ стоит файловая переменная, он вводит данные не с клавиатуры, а из файла.

Например:

var

f: text; a.b.c: integer;

begin

read (a,b,c); {ввод с клавиатуры}

read (f,a,b,c); {ввод из файла}

Текстовый файл для оператора READ такой же источник символов, как и клавиатура, только эти символы следуют друг за другом не во времени, а в пространстве файла. Во времени можно перемещаться лишь в одну сторону, по файлу — тоже. Движение допускается последовательное, от начала к концу, поэтому текстовые файлы называют последовательными.

Чтобы уяснить, что прочтет из файла тот или иной оператор READ, введем понятие указателя файла. Фактически указатель — это номер очередного символа файла, но лучше вообразить его в виде стрелки, направленной в определен­ную точку файла.

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

Как узнать, можно ли еще читать из файла ? Для этого в Паскале есть логическая функция

EOF (файловая переменная)

Она возвращает true, если достигнут конец файла, и false в противном случае. Название функции сокращает слова «End Of File» — конец файла.

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

ПРИМЕР. Чтение из текстового файла с выводом на экран.

var

f: text;

s: string;

begin

assign (f.'XXX.TXT);

reset (f);

while not eof (f) do

begin

readln (f, s); {ввод из файла}

writeln (s); {вывод на экран}

end {while};

close(f)

end.

Запись в текстовый файл:

Запись в текстовый файл выполняется оператором WRITE, в котором перед списком вывода стоит файловая переменная. Вывод информации производит, как можно догадаться оператор

 

Write(<Имя файловой переменной>, <Список вывода>);

Данные из списка вывода заносятся в файл, открытый для записи.

Для текстовых файлов используются также операторы Readln и Writeln с соответствующими дополнениями, относящимися к файловому вводу-выводу.

 

 

Выводимая информация присоединяется к той, что была выведена в файл с момента его открытия.

Желая создать новый файл, его открывают оператором REWRITE. Если же хотят дополнить уже существующий файл, открытие выполняют оператором APPEND. Открытие существующего файла оператором REWRITE приведет к потере того, что находилось там раньше.

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

Дополнительный оператор записи WRITELN выводит все, предусмотренное списком вывода, и символы #13 #10 в придачу.

ПРИМЕР.Ввод с клавиатуры и запись в текстовый файла 10 чисел .

var

f: text;

s: string;

i: integer;

begin

assign (f.'XXX.TXT);

rewrite (f); {открытие файла}

for i:=1 to 10 do

begin

writeln (‘ввести число’); {вывод запроса на экран}

readln (s); {ввод с клавиатуры числа}

writeln (f,s); {вывод в файл}

end

close (f) {закрытие файла}

end.