Типизированные файлы
Типизированные файлы позволяют организовать прямойдоступ к каждой из компонент (по ее порядковому номеру), поскольку длина любого компонента типизированного файла строго постоянна. Описание файловой переменной для таких файлов выполняется в следующем виде: Var < ф.п.> : file of <тип компонент>; Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на компоненту с номером нуль. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом. Для работы с типизированными файлами определены следующие процедуры и функции (табл. 9). Процедуру SEEK и функции FILESIZE, FILEPOS нельзя использовать для текстовых файлов. Таблица 9 Процедуры и функции для работы с типизированными файлами
Чтобы переместить указатель в конец файла, можно написать, например: Seek(f, FileSize(f)); где f - файловая переменная. Файловая переменная предварительно должна быть объявлена предложением FILE OF и связана с именем физического файла процедурой ASSIGN. Файл перед обращением к нему должен быть открыт. Текстовые файлы Это файлы последовательного доступа. Они предназначены для хранения текстовой информации. Текстовые файлы связываются с файловыми переменными типа TEXT: Var <ф.п.> : TEXT; Текстовый файл в Pascal ABC трактуется как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой строки. При создании текстового файла в конце каждой строки ставится специальный признак EOLN (End Of LiNe - конец строки), а в конце всего файла – признак EOF (End Of File – конец файла) c кодом 26. Тестируются эти признаки одноименными логическими функциями. Для доступа к записям текстового файла применяются процедуры READ, 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
Тексториентированные процедуры и функции
При выводе логических выражений в зависимости от значения выводятся подстроки TRUE и FALSE. Ввод логических констант процедурами READ и READLN не предусмотрен. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|