Основные операции и стандартные процедуры и функции для работы с текстовыми файлами
Типизированные файлы с прямым доступом.
Последовательный доступ характерен тем, что поиск нужной компоненты в файле производится только путем последовательного их перебора от начала к концу и в том порядке, как они записаны на носителе. Каждый новый поиск необходимо начинать с 0-ой компоненты, а потому файл надо закрыть и затем вновь открыть. По этой причине, чтобы сократить время поиска, как правило, последовательные файлы предварительно сортируют, т.е. упорядочивают по ключевым признакам.
Прямой доступ предполагает непосредственный выход на нужную компоненту в файле. Для этого необходимо только увязать номер компоненты со значением реквизита-признака, по которому ведется поиск. Этот признак (или их совокупность) называют ключом поиска.
Чтобы реализовать прямой доступ к компонентам файла, необходимо его при создании сначала инициализировать. Т.е. осуществить его разметку путем занесения в физический файл фиктивных компонент (записей) с пустыми или нулевыми значениями полей. Чтобы облегчить работу с подобным файлом, рекомендуется отдельное поле выделить для указания номера компоненты (записи), который в дальнейшем будет выполнять функцию ключа поиска.
После инициализации достаточно обновить файл путем занесения в него требуемых информационных компонент в режиме прямого доступа с применением пары стандартных процедур SEEK и WRITE:
Режим прямого доступа позволяет буквально «бегать» по файлу из конца в конец, не производя по ходу работы процедур закрытия и открытия файла.
Замечание: файл с прямым доступом обеспечивает очень быстрый
выход на нужную компоненту. Однако он получается более
длинным, чем аналогичный файл с последовательным
доступом, т.к. включает компоненты с полезной
информацией и фиктивные. Поэтому использовать его
следует осторожно и тогда, когда количество фиктивных
компонент получается существенно меньше тех, которые
содержат конкретную информацию для обработки.
Кроме операции обработки информации, с использованием прямого доступа достаточно эффективно выполняются такие действия по коррекции файла, как:
- добавление в конец файла (обычным порядком);
- обновление (часть полей в записи меняет свое содержание);
- замена старых компонент на новые (меняется содержимое всей
компоненты);
- вставка новых компонент в середину файла (в нужном месте
фиктивные компоненты наполняются полезной информацией и
становятся новыми реальными компонентами);
- удаление (ненужные компоненты с полезной информацией
переводятся в статус фиктивных, т.е. заполняются пробелами и
нулями).
Текстовые файлы.
Эти файлы используются при обработке разнообразной текстовой информации: исходной и результатной. Их специфика – в следующем:
1. текстовый файл можно создавать программным способом или с
помощью текстового редактора, с клавиатуры.
2. содержимое текстового файла рассматривается как
последовательность строк переменной длины, но не более 128
символов;
3. строки разделяются специальным маркером <CR>-
<LF> («возврат каретки» - «прогон строки») или, иначе, признаком
EOLN (End Of LiNe - «конец строки»); при создании файла
программой он формируется процедурой WRITELN, а с
клавиатуры – нажатием клавиши «ENTER»;
4. конец файла обозначается признаком EOF (End Of File – «конец
файла»); при создании файла программой он формируется
процедурой CLOSE, а с клавиатуры – «Ctrl+Z»;
5. обработка текстового файла производится построчно и строго
последовательно, начиная с первой строки;
6. для одного текстового файла одновременно производить операции
ввода-вывода компонент (строк) нельзя. Для смены характера
работы с текстовым файлом следует заново открыть его.
Основные операции и стандартные процедуры и функции для работы с текстовыми файлами.
Операции открытия и закрытиявыполняются обычным порядком, как и для типизированных файлов. При этом используются процедуры ASSIGN, RESET, REWRITEи CLOSE.
Кроме того, для открытия ранее созданного текстового файла применима процедура
APPEND(<имя файловой переменной>);
Ее специфика в том, что указатель устанавливается не в начало файла, а в его конец, делая возможным добавлять новые строки в конец уже существующего текстового файла.
Ввод-вывод компонент может производиться с помощью процедур READи WRITE. Однако следует помнить, что при работе с текстовым файлом можно иметь дело только с символьной информацией. Поэтому при записи в текстовый файл значения других типов будут преобразовываться в символьное представление. А при чтении из текстового файла очередная часть текущей строки будет пониматься как символьное представление значения, тип которого определяется типом очередной переменной из процедуры READ. Разделителями символьных представлений значений служат пробелы и признаки конца строки или файла.
Дополнительно при работе с текстовыми файлами используются две модифицированные процедуры ввода-вывода:
Она идентична READ, но после считывания последней переменной из списка (символов, чисел, строк) оставшаяся часть строки до маркера EOLN пропускается, и новое чтение осуществляется с новой строки (курсор будет перемещен туда!).
Эта процедура идентична WRITE, но после записи последней переменной из списка записываемая строка помечается маркером <CR>-<LF> (EOLN), и производится переход к следующей строке текстового файла.
(Вспомним, процедура READ автоматически осуществляет переход к
следующей строке только после того, как текущая строка
будет исчерпана! Аналогично по WRITE.)
Для контроля конца файла обычным порядком может использоваться функция EOF, адля контроля конца текущей строки – специфическая функция:
EOLN[(<имя файловой переменной>)] – она возвращает TRUE, если обнаружен признак <CR> (EOLN – «конец строки»); иначе - возвращается FALSE.
При работе с текстовыми файлами не применима процедура SEEK, т.к. длина компонентов-строк – неопределенная. Но имеются альтернативные функции поиска конца или строки, или файла:
SEEKEOLN[(<имя файловой переменной>)] – она пропускает все символы-разделители (пробелы и символы табуляции) и ищет конец текущей строки: если обнаружен такой признак, то возвращается TRUE; если обнаружен любой значащий символ, то возвращается FALSE.
SEEKEOF[(<имя файловой переменной>)] – она также пропускает все символы-разделители и, дополнительно, признаки конца строк, но ищет конец файла; если он обнаружен – возвращается TRUE, иначе – FALSE.
Примечание: если указанные функции используются без имени в