Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
выш.мат. методичка.DOC
Скачиваний:
30
Добавлен:
13.02.2015
Размер:
1.71 Mб
Скачать

Функции

Еоf(Р) - конец файла. Принимает значение Тruе, если указатель текущей компоненты файла находи­тся за последней компонентой файла (за последним символом, если файл текс­товый), и Fаlse - в противном случае.

IOResult - результат последней операции ввода-вывода. Возвращает число 0, если операция ввода-вывода завершилась успешно, и дру­гое число - в противном случае. После применения этой функции параметр со­стояния последней операции ввода-вывода сбрасывается в 0.

11.2. Стандартные процедуры и функции для текстовых файлов

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

Особенностью работы с текстовыми файлами является то, что параметры, зна­чения которых вводятся и выводятся с помощью процедур Read или Write, могут быть не обязательно типа Сhar или string, а и других простых типов (целых, ве­щественных типов при вводе, целых, вещественных типов, типа Вооlean -при выводе). Эти процедуры могут также работать и с АSCIIZ-строками.

Имеется две стандартные файловые переменные для текстового файла: Input и Оtput. Переменная Input по умолчанию связана с клавиатурой, а Оutput - c экраном дисплея. Эти устройства автоматически открываются при запуске прог­раммы, т. е. фактически выполняются процедуры:

Аssign(Input,’’); Reset(Input);

Аssign(Оutput, ‘’) ; Rewrite(Output);

Они также автоматически закрываются после работы программы.

Если при работе с файлами типа Техt в процедуре или функции не указана файловая переменная, считается, что используется файловая переменная Input или Оutput.

Файл типа Техt может быть открыт либо для чтения процедурой Reset, либо для записи процедурой Rewrite или Арреnd.

Далее кратко описаны процедуры и функции, используемые для файлов типа Техt. Так же как и ранее, в этих подпрограммах F - файловая переменная, свя­занная с конкретным физическим файлом процедурой .

ПРОЦЕДУРЫ

Арреnd(F) - открытие файла для добавления в конец информации. Открывается существующий файл, с которым связана файловая переменная F и указатель текущей компоненты файла настраивается на конец файла.

Flush(F) - освобождение буфера выходного файла.

Информация из буфера вывода записывается в файл, с которым связана файловая переменная F.

Read(F, <список ввода>) - чтение информации из файла. Из файла, с которым связана файловая переменная F, читаются значения для одной или нескольких переменных списка ввода (см. ниже).

ReadLn(F, <список ввода>) - чтение строки из файла. То же, что и процедура Read, но непрочитанная часть строки, включая приз­нак конца строки, пропускается.

SetTextBuf(F, Buf [, Size])-назначение буфера ввода-вывода.

Для файла, с которым связана файловая переменная F, назначается буфер вво­да-вывода в виде переменной Вuf(любого типа). Необязательный параметр Size задает размер буфера в байтах. Если этот параметр не указан, в качестве буфера используется вся переменная Вuf. Если эта процедура не используется, для организации ввода-вывода берется стандартный буфер ввода-вывода раз­мером в 128 байтов.

Write(F, <список вывода>) - запись информации в файл. В файл, с которым связана файловая переменная F, записываются значения выражений списка вывода (см. ниже).

WriteLn(F, <список вывода>) - запись строки в файл. То же, что и процедура Write, но выводимая информация завершается призна­ком конца строки.

ФУНКЦИИ

Еоln(F) - конец строки файла. Принимает значение Тruе, если текущей компонентой файла является признак конца строки или если функция Еоf(F) принимает значение Тruе. В остальных случаях функция принимает значение Fаlsе.

SeekЕоf(F) - конец файла.

Отличается от Еоf(F) тем, что стояние в конце файла символы пробела и та­буляции пропускаются.

SeеkЕоln(F) - конец строки файла.

Отличается от Еоl(F) тем, что стоящие в конце строки символы пробела и та­буляции пропускаются.

Пример. Прочитать из текстового файла А все записанные в него целые числа преобразовать их в вещественные и вывести в текстовый файл В по 4 числа в строку.

рrоgram ЕХАМРLE;

vаr F1, F2: Техt;

X: Rеаl;

i:Integer;

begin

{$I-} {внутренняя проверка правильности операции с файлом}

Assign(F1, ‘А’); {связь с файлом А. содержащим только целые числа}

Reset(F1); {открыть файл для чтения}

{$I+} {отключить внутреннюю проверку}

if IOResult <> 0 then

Writeln1(‘Нет файла А’)

Else begin

Аssign(F2, ‘В’); {связь с файлом В}

Rewrite(F2); {открыть файл для записи}

Rереаt

for i :=1 to 4 do

If поt SeekEof(F1) then

bеgin

Read(F1,X);

Write(F2, X: 18) {Форматный вывод- см. ниже}

Еnd;

Writeln(F2) {переход на новую строку}

until SeekEof(F1); Сlоsе(F1); Сlose(F2) еnd

еnd.

Ввод информации из файла осуществляется с помощью процедур Read и ReadLn. Форма использования этих процедур следующая:

Read(F, <список ввода>);

ReadLn(F, «список ввода >);

В этих операторах F - файловая переменная, связанная с файлом, из которого вводится информация. Как указывалось выше, если эта файловая переменная отсутствует, считается, что используется стандартная файловая переменная Input, а ввод стандартно осуществляется с клавиатуры. Список ввода представляет собой перечисленные через запятую имена переменных, которым присваиваются вве­денные значения. Переменные могут быть целого, вещественного, символьного типа, типа string или типа РСhar. Их количество может быть любым (в том числе и пустым). Так как в текстовом файле информация хранится в виде символов, то при вводе значений целого и вещественного типа автоматически происходит пе­рекодирование информации в двоичный формат. Отдельные числа в текстовом файле должны отделяться пробелами, знаками табуляции или признаками конца строки. При вводе символа из файла читается один символ, в том числе и символ возврата каретки (код 13), если функция Еоln(F) дает значение Тruе, или символ конца файла (код 26), если функция Еоf(F) дает значение Тruе. При вводе величины типа string или РСhar из файла читается необходимое число символов, но в пределах одной строки (до символа конца строки - код 13). При этом, ее чтение осуществляется процедурой Read, признак конца строки не читается при последующем чтении строковой информации в соответствующие переменные ничего заноситься не будет до тех пор, пока не будет прочитан признак конца строки (например, процедурой ReadLn).

Пример

vаr А, В: Integer;

С: Rеаl;

D, Е: Сhar;

ReadLn(А, В, С, D, Е);

В этом примере с клавиатуры дисплея вводятся два целых числа, одно вещест­венное число и два символа.

Вывод информации в текстовый файл (в том числе и на экран дисплея) осу­ществляется с помощью процедур Write и WriteLn.

Write(<список вывода>);

WriteLn(<список вывода>);

В этих операторах, как и в операторах ввода, F - файловая переменная. Спи­сок же вывода - это перечисленные через запятую выражения, значения которых выводятся в текстовый файл. Выражения могут быть целого, вещественного, логического и символьного типа, а также типа string или, PChar. Число элементов списка вывода может быть любым (в том числе и нулевым; при этом процедура Write не выполняет никаких действий, а процедура WriteLn осуществляет пере­ход на новую строку). При выводе чисел происходит их автоматическая переко­дировка в символьную форму. В случае логической величины выводится ее зна­чение словом TRUE или FALSE.

Так как элементы списка вывода в общем случае являются выражениями, то они, в частности, могут быть и строковыми константами. Это позволяет осущест­влять комментированный вывод информации, например:

WriteLn('Площадь фигуры равна: ' , SFig);

WriteLn('Строка ', Namе, 'содержит ', Len, ' символов');

В Turbo Pascal при выводе информации в текстовый файл по умолчанию отводится количество позиций, равное размеру этой информации. Так, например, при выводе символа отводится одна позиция, при выводе строки - число пози­ций, равное длине строки, при выводе целого числа - число позиций, равное числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при выводе последовательных элементов информации (например, нескольких целых чисел) и предусматривать меры, чтобы отдельные элементы информации не сливались друг с другом: вывод разделяющих пробелов, разнесение информации по разным строкам и т.д. Исключение составляют вещественные числа - под них выделяется 17 позиций, и при выводе они выравниваются по правому краю выделенного поля.

Изменить стандартную форму вывода можно используя систему форматов языка Паскаль. Всего в языке существует два формата вывода, которые записываются через двоеточие после соответствующего элемента вывода, например: Write(Ехрrеssion: М: N);

В этом операторе Ехрrеssion - выражение, значение которого выводится в файл данном случае - на экран дисплея); М и N - форматы.

Форматы М и N представляют собой в общем случае выражения целого типа. Формат можно использовать при выводе значений любого типа, и он определяет размер поля, которое выводится данное значение (см. выше программу ЕХАМРLE). Выводимая информация выравнивается по правому краю по­ля. Если для вывода конкретной информации выделенного поля недостаточно оно автоматически увеличивается до нужного размера. Если при выводе вещест­венного числа этот формат задан меньше 8, то, он автоматически увеличивается до 8. Второй формат используется только с вещественными числами и определя­ет число знаков после десятичной точки, которые необходимо отобразить в фай­ле. Если этот формат используется, то вещественное число представляется в фо­рме с фиксированной точкой, в противном случае - с плавающей точкой.

Пример. Вывести на экран дисплея таблицу умножения целых чисел от 1 до 9.

рrоgram ЕХАМРЕ;

var i, j: Вуte;

begin

WriteLn; WriteLn (' ТАБЛИЦА УМНОЖЕНИЯ' : 45); WriteLn; Write(' ':10);

For j := 1 to 9 dо Write(j:6); WriteLn; WriteLn;

For i := 1 to 9 dо begin

Write(i:6, ' ':4); For j := 1 to 9 dо Write(i*j:6); WriteLn;

End

End.