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




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

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

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

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

После инициализации достаточно обновить файл путем занесения в него требуемых информационных компонент в режиме прямого доступа с применением пары стандартных процедур SEEK и WRITE:

 

SEEK (< имя файловой переменной >,< номер компоненты (записи) >);

WRITE (< имя файловой переменной >,< имя компоненты (записи) >);

 

В этом случае сначала указатель устанавливается на нужную компоненту, а затем происходит ее наполнение заранее подготовленным конкретным содержанием.

 

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

При обработке информации в режиме прямого доступа чтение нужной компоненты (записи) по аналогии выполняется парой стандартных процедур SEEK и READ:

 

SEEK (< имя файловой переменной >,< номер компоненты (записи) >);

READ (< имя файловой переменной >,< имя компоненты (записи) >);

 

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

 

Замечание: файл с прямым доступом обеспечивает очень быстрый

выход на нужную компоненту. Однако он получается более

длинным, чем аналогичный файл с последовательным

доступом, т.к. включает компоненты с полезной

информацией и фиктивные. Поэтому использовать его

следует осторожно и тогда, когда количество фиктивных

компонент получается существенно меньше тех, которые

содержат конкретную информацию для обработки.

 

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

- добавление в конец файла (обычным порядком);

- обновление (часть полей в записи меняет свое содержание);

- замена старых компонент на новые (меняется содержимое всей

компоненты);

- вставка новых компонент в середину файла (в нужном месте

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

становятся новыми реальными компонентами);

- удаление (ненужные компоненты с полезной информацией

переводятся в статус фиктивных, т.е. заполняются пробелами и

нулями).

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

Эти файлы используются при обработке разнообразной текстовой информации: исходной и результатной. Их специфика – в следующем:

1. текстовый файл можно создавать программным способом или с

помощью текстового редактора, с клавиатуры.

2. содержимое текстового файла рассматривается как

последовательность строк переменной длины, но не более 128

символов;

3. строки разделяются специальным маркером <CR>-

<LF> («возврат каретки» - «прогон строки») или, иначе, признаком

EOLN (E nd O f L i N e - «конец строки»); при создании файла

программой он формируется процедурой WRITELN, а с

клавиатуры – нажатием клавиши «ENTER»;

4. конец файла обозначается признаком EOF (E nd O f F ile – «конец

файла»); при создании файла программой он формируется

процедурой CLOSE, а с клавиатуры – «Ctrl+Z»;

5. обработка текстового файла производится построчно и строго

последовательно, начиная с первой строки;

6. для одного текстового файла одновременно производить операции

ввода-вывода компонент (строк) нельзя. Для смены характера

работы с текстовым файлом следует заново открыть его.

 

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

Операции открытия и закрытия выполняются обычным порядком, как и для типизированных файлов. При этом используются процедуры ASSIGN, RESET, REWRITE и CLOSE.

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

 

APPEND (< имя файловой переменной >);

 

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

 

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

Дополнительно при работе с текстовыми файлами используются две модифицированные процедуры ввода-вывода:

 

READLN ([< имя файловой переменной >],< список ввода >);

 

Она идентична READ, но после считывания последней переменной из списка (символов, чисел, строк) оставшаяся часть строки до маркера EOLN пропускается, и новое чтение осуществляется с новой строки (курсор будет перемещен туда!).

 

WRITELN ([< имя файловой переменной >],< список вывода >);

 

Эта процедура идентична WRITE, но после записи последней переменной из списка записываемая строка помечается маркером <CR>-<LF> (EOLN), и производится переход к следующей строке текстового файла.

(Вспомним, процедура READ автоматически осуществляет переход к

следующей строке только после того, как текущая строка

будет исчерпана! Аналогично по WRITE.)

 

Для контроля конца файла обычным порядком может использоваться функция EOF, а для контроля конца текущей строки – специфическая функция:

EOLN [(< имя файловой переменной >)] – она возвращает TRUE, если обнаружен признак <CR> (EOLN – «конец строки»); иначе - возвращается FALSE.

 

 

При работе с текстовыми файлами не применима процедура SEEK, т.к. длина компонентов-строк – неопределенная. Но имеются альтернативные функции поиска конца или строки, или файла:

 

SEEKEOLN [(< имя файловой переменной >)] – она пропускает все символы-разделители (пробелы и символы табуляции) и ищет конец текущей строки: если обнаружен такой признак, то возвращается TRUE; если обнаружен любой значащий символ, то возвращается FALSE.

 

SEEKEOF [(< имя файловой переменной >)] – она также пропускает все символы-разделители и, дополнительно, признаки конца строк, но ищет конец файла; если он обнаружен – возвращается TRUE, иначе – FALSE.

Примечание: если указанные функции используются без имени в

скобках, то по умолчанию подразумевается

стандартный файл INPUT.

Нетипизированные файлы.

 

У подобных файлов не указывается тип компонент. Это делает их совместимыми с другими видами файлов.

Файлы без типа удобны для организации доступа к физическим файлам любой структуры, для которых важно лишь одно – величина (размер) компонент. Содержание – вне интереса. Поэтому чаще всего такие файлы применяют для быстрого обмена данными между физическим файлом и оперативной памятью, т.е. для копирования. Причем без использования буферной памяти, которая всегда требуется для файлов с типом. Это существенно повышает скорость, что имеет важное значение при больших объемах данных..

Нетипизированные файлы оперируют т.н. блоками записей. Они имеют номера, что позволяет реализовывать прямой доступ к записям. Стандартная длина блока – 128 байтов. Но ее можно изменить (максимально до 65535 байтов) при открытии файла, задав вторым параметром в RESET или REWRITE. Например:

 

RESET(…, 512);

Или REWRITE(…, 1024);

 

При организации быстрого обмена следует учитывать, что:

1. длина записи (компоненты) должна быть кратна размеру физического сектора диска, т.е. 512 байт; но надо помнить, что т.к. последняя запись может быть неполной, то весь файл гарантированно может быть скопирован только при размере записи, равной 1;

2. если учесть, что на деле обменная порция соизмеряется с т.н. кластером - 2-мя и более свободными смежными секторами (в зависимости от типа диска), то длину записи целесообразно приравнивать его длине; это ускорит скорость обмена данными между физическим файлом и оперативной памятью;

3. доступ к любой компоненте нетипизированного файла осуществляется известными стандартными процедурами SEEK, FILESIZE и FILEPOS; но чтение и запись компонент производится не по READ и по WRITE соответственно, а с помощью следующих высокоскоростных процедур:

 

BLOKREAD (< имя файловой переменной >,< имя буф. перем. >,N[,FZ]);

BLOKWRITE (< имя файловой переменной >,< имя буф. перем. >,N[,FZ]);

 

где: буф. перем. – буферная переменная в оперативной памяти для

обмена данными с дисками;

N – количество записей, которые читаются или записываются за

одно обращение к диску;

FZ – необязательный параметр, фиксирующий количество фактически прочитанных записей.

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

За один вызов может быть передано N*RAZM байт, где RAZM – длина записи нетипизированного файла из RESET или REWRITE.

Надо заботится о том, чтобы физическая длина буферной переменной была достаточной для размещения всех N*RAZM байт. Если она меньше, то возникает ошибка ввода-вывода, которую можно предупредить указанием FZ.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-04-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: