Обработка последовательных файлов

Рассматривать свойства последовательных файлов мы будем на классическом примере файла, содержащего записи о сотрудниках небольшой компании. Такой файл состоит из логических записей (см. «Хранение и поиск файлов» в разделе 1.3), в каждой из которых хранится информация об одном сотруднике. Каждая логическая запись делится на поля, такие как имя, адрес, идентификационный номер сотрудника, номер социального обеспечения и т. д.

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

while (конец файла не достигнут) do

(получить следующую запись из файла и обработать ее)

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

Электронная почта и mime

Стандартная инфраструктура электронной почты (E-mail) в сети Интернет разработана для обработки традиционных ASCII-файлов и, таким образом, не совместима с другими форматами файлов, включая изображения, звуки и документы, обработанные текстовыми процессорами. Для передачи таких файлов по электронной почте их необходимо закодировать в формате текстового файла, передать и затем декодировать обратно в оригинальный формат. Для этой цели были созданы MIME (Multipurpose Internet Mail Extensions, многоцелевые расширения электронной почты в сети Интернет). Вкратце, MIME — это набор стандартов кодирования, при помощи которых определенные типы файлов (например, изображения в формате JPEG и GIF, видеофайлы MPEG, документы Microsoft Word) можно преобразовать в текстовые. Когда такой файл передается программе электронной почты с поддержкой MIME, он кодируется и помечается используемой системой кодирования, передается адресату и затем декодируется согласно метке документа. Сегодня возможности MIME встроены в большинство приложений для работы с электронной почтой.

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

Неотъемлемой частью процесса обработки последовательного файла является определение конца файла. В общем случае мы определяем конец последовательного файла как EOF (end-of-file, конец файла). Существует много способов распознавания ЕОЕ Один из них — помещение специальной записи, называемой сигнальной меткой (sentinel), в конце файла. Конечно же, чтобы избежать недоразумений, поля сигнальной метки должны содержать значения, которые никогда не встречаются среди данных приложения. Используя эту технику, программа на языке программирования третьего поколения управляла бы обработкой последовательного файла при помощи подобных операторов:

Получить первую запись из файла;

while (полученная запись не является сигнальной меткой) do (обработать запись и получить следующую запись из файла)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: