Здавалка
Главная | Обратная связь

Типизированные файлы



Типизированные файлы позволяют организовать прямойдоступ к каж­дой из компонент (по ее порядковому номеру), поскольку длина любого компонента типизированного файла строго постоянна. Описание файловой переменной для таких файлов выполняется в следующем виде:

Var < ф.п.> : file of <тип компонент>;

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

Для работы с типизированными файлами определены следующие проце­дуры и функции (табл. 9). Процедуру SEEK и функции FILESIZE, FILEPOS нельзя использовать для текстовых файлов.

Таблица 9

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

Процедуры, функции Выполняемые действия
READ(<ф.п.>, <список ввода>); WRITE(<ф.п.>, <список вывода>);   SEEK(<ф.п.>, <номер_компоненты>)   FILESIZE(<ф.п.>);   FILEPOS(<ф.п.>); Процедура обеспечивает чтение очередных ком­понентов файла Процедура используется для записи новых ком­понентов в файл; в качестве элементов вывода может стоять выражение. Процедура смещает указатель файла к компо­ненту с указанным номером; <номер_компоненты> – выражение типа Integer Функция возвращает количество компонент, содержащихся в файле Функция возвращает порядковый номер компо­ненты файла, доступной для чтения или записи

Чтобы переместить указатель в конец файла, можно написать, напри­мер: Seek(f, FileSize(f)); где f - файловая переменная.

Файловая переменная предварительно должна быть объявлена предло­жением FILE OF и связана с именем физического файла процедурой ASSIGN. Файл перед обращением к нему должен быть открыт.

Текстовые файлы

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

Текстовые файлы связываются с файловыми переменными типа TEXT:

Var <ф.п.> : TEXT;

Текстовый файл в Pascal ABC трактуется как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой строки. При создании текстового файла в конце каждой строки ставится специальный признак EOLN (End Of LiNe - конец строки), а в конце всего файла – признак EOF (End Of File – конец файла) c кодом 26. Тестируются эти признаки одноименными логическими функциями.

Для доступа к записям текстового файла применяются процедуры RE­AD, READLN, WRITE, WRITELN. В них можно использовать переменное число параметров, в качестве которых могут быть символы, строки и числа. Первым параметром в любой из перечисленных процедур может стоять фай­ловая переменная. В этом случае осуществляется обращение к дисковому файлу, связанному с файловой переменной процедурой ASSIGN, и открытому процедурами RESET или REWRITE.

 

Процедуры ввода

Процедура READ обеспечивает ввод символов, строки и чисел. Она имеет следующий формат:

READ(<ф.п.>,<список_ввода>); или READ(<список_ввода>);

где <список_ввода> - последовательность из одной или более переменных типа CHAR, STRING или любого целого или вещественного типов, например:

READ(Х); // ввод переменной Х с клавиатуры

READ(f, x1, x2, x3); // ввод трех переменных из файла

При вводе переменной типа CHARвыполняется чтение одного символа из файла и присваивается считанное значение переменной. Если перед чтением указатель файла достиг конца очередной строки, то считывается символ CR (код 13). Если достигнут конец файла - то символ EOF.

При вводе переменной типа STRING количество считанных символов равно максимальной длине строки, если раньше не встретились символы CR, EOF. В этом случае эти символы в строку не помещаются. Если коли­чество символов во входной строке больше максимального размера строки, то «лишние» символы до конца строки отбрасываются, а новое обращение к READ возвращает пустую строку.

Таким образом, READ не в состоянии прочесть последовательность строк: читается только одна строка, остальные окажутся пустыми. Для ввода последовательности строк символов применяется процедура READLN.

При вводе числовых данных процедура READ сначала выделяет подс­троку во входном потоке по следующему правилу: все ведущие пробелы, символы табуляции и маркеры конца строк пропускаются до первого знача­щего символа; и, наоборот, после первого значащего символа любой из перечисленных символов или символ EOF указывает на конец подстроки. Вы­деленная таким образом подстрока рассматривается как символьное представление числовой константы и присваивается переменной. Фактически весь файл рассматривается как одна длинная строка чисел.

Процедура READLN также обеспечивает ввод символов, строк и чисел:

READLN( f, x);

илиREADLN(f, x1, x2, ..., xN);

Она идентична процедуре READ за исключением того, что после счи­тывания последней переменной списка ввода оставшаяся часть строки до маркера EOLN пропускается, поэтому следующее обращение к READLN или READ начинается с первого символа новой строки.

Эту процедуру можно вызвать без параметра <список ввода>: READLN(f); READLN; что приведет к пропуску всех символов текущей строки. Таким способом можно организовать ожидание нажатия клавиши ENTER при открытом окне результатов.

При чтении с клавиатуры курсор помещается в начало следующей строки, в то время как в процедуре READ остается в текущей строке.

Процедуры вывода

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

WRITE(<ф.п.>, <список_вывода>);или WRITE(<список_вывода>);

где <список вывода> - это последовательность, состоящая из одной и более переменных (или вы­ражений) символьного, строкового, логического или любого целого или вещественного типа, например:

WRITE(x); WRITE(f, x1, x2, xN);

Файловая переменная, если она указана, должна быть предварительно описана типом TEXT и связана с именем файла процедурой ASSIGN. Если файловая переменная отсутствует, подразумева­ется вывод в стандартный файл – на экран дисплея.

Вывод процедурой WRITELN отличается от WRITE тем, что выводимая строка завершается кодами CR (возврат каретки) и LT (перевод строки), т. е. добавляет маркер конца строки.

При вызове WRITELN можно опускать <список_вывода>. В этом случае в файл передается признак конца строки EOLN, что при выводе на экран приводит к переводу курсора в начало следующей строки:

WRITELN(f); WRITELN;

Любой элемент X списка вывода для процедур WRITE/ WRITELN может быть представлен в следующем формате: X[:w[:d]], причем элементы, заключенные в квадратные скобки, мо­гут отсутствовать. Здесь X - имя переменной или выражение, w, d - вы­ражения целого типа WORD (0..65535). Если параметр w присутствует, то он указывает минимальную ширину поля для записи значения X. При длине переменной X меньше w слева производится дополнение поля вывода пробе­лами, если Х больше w, то w игнорируется и выводится необходимое число символов (по умолчанию w = 23); если параметр w не указан, то значение соответствующей переменной выводится вслед за предыдущим без како­го-либо разделения.

Параметр d задает количество десятичных знаков в дробной части вещественного числа. Используется только для вывода значений вы­ражений вещественных типов. Если параметр d не указан, то число выводится в экспоненциальной форме, в противном случае в формате представ­ления с фиксированной точкой. Если d = 0, выводится только целая часть числа. Например: результаты вывода для числа Х = 3.22 будут следующие:

WRITE(X:6:2); { 3.22}

WRITE(X:6:0); { 3}

WRITE(X:4:2); {3.22}.

Для текстовых файлов также применимы следующие процедуры и функции (табл. 10).

 

Таблица 10

Процедуры, функции Выполняемые действия
Append( f);   EOLN(f);     SeekEOLN(f);   SeekEOF(f); Процедура открывает уже существующий файл f для дозаписи в его конец (для расширения) Функция возвращает значение TRUE, если во входном файле f достигнуты маркеры конца строки EOLN или конца файла EOF, и FALSE - в противном случае Функция пропускает все пробелы и знаки табу­ляции до первого признака EOLN или первого значащего символа. Возвращает значение TRUE, если обнаружен маркер конца файла или конца строки Функция пропускает все пробелы, знаки табу­ляции и маркеры конца строк до маркера конца файла или первого значащего символа. Если мар­кер обнаружен, возвращает значение TRUE

Тексториентированные процедуры и функции

 

При выводе логических выражений в зависимости от значения выво­дятся подстроки TRUE и FALSE. Ввод логических констант процедурами RE­AD и READLN не предусмотрен.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.