Текстовые и двоичные файлы

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

Такие соглашения существуют и в современных системах. В частности, в операционной системе UNIX предполагается, что конец строки обозначается только символом перевода строки, тогда как в системах, разработанных Apple Computer, Inc., используется только символ возврата каретки, а в операционных системах Microsoft необходимы оба символа — возврат каретки и перевод строки. В результате для передачи файлов из одной системы в другую необходимо выполнять преобразования. В этом состоит различие между текстовыми файлами и бинарными файлами при передаче их в Интернете по протоколу FTP (File Transfer Protocol, протокол передачи файлов). Во время использования FTP текстовый файл — это файл, для которого требуется такое преобразование, а бинарный файл передается без преобразования. В частности, файлы, которые созданы текстовыми процессорами, должны передаваться как бинарные, так как в этих файлах используются собственные средства кодирования текста.

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

Важно различать простые текстовые файлы, которыми манипулируют утилиты, называемые редакторами (editor), и более сложные файлы, которые создаются при помощи программ обработки текста или текстовых процессоров (word processors). Оба вида файлов содержат текстовый материал. Однако в текстовом файле содержится только посимвольно закодированный текст, а в файле, полученном при помощи текстового процессора, записаны различные внутренние коды, обозначающие разные шрифты, информацию о выравнивании текста и т. д. Более того, даже для представления текста в текстовых процессорах могут использоваться внутренние коды, а не стандартные, такие как ASCII или Unicode. Поэтому для просмотра и модификации файла, созданного программой обработки текста, требуется более сложное приложение, чем простой редактор, необходимый для работы с текстовым файлом.

Простота текстовых файлов сделала их популярным выбором для различных приложений. Действительно, текстовый файл зачастую является структурой, лежащей в основе реализации более сложных последовательных файлов, например файла записей сотрудников. Требуется только разработать унифицированный формат представления информации о каждом сотруднике в виде текстовой строки, кодирования информации согласно этому формату и последовательной записи результирующих записей сотрудников в одну строку текста. Например, можно создать простой файл сотрудников, решив, что каждая запись сотрудника — это строка из 31 символа, где поле длиной 25 символов содержит имя сотрудника (если имя короче 25 символов, оставшееся место заполняется пробелами), а следующие 6 символов — его идентификационный номер. Конечный файл будет выглядеть как длинная строка кодированных символов, в которой каждый блок из 31 символа представляет информацию об одном сотруднике (рис. 8.4). Информацию можно извлекать из файла в терминах логических записей длиной 31 символ.

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

Простота текстовых файлов привела к разработке способов кодирования нетекстового материала, например музыкальных произведений, в виде текстовых файлов. На первый взгляд система нотных станов, тактов и нот, при помощи которых обычно представляются музыкальные тексты, не соответствует посимвольному формату текстовых файлов. Но эту проблему можно решить, разработав альтернативную систему обозначений. Точнее, мы можем обозначать начало нотного стана как <staff clef = "treble">, конец стана как </staff>, знак размера при ключе в форме <time> 2/4 </time>, начало и конец такта как <measure> и </measure> соответственно, а ноты, например четвертную ноту С, как <notes> qtr С </notes> и т. д. Тогда текстом

<staff clef - "treble"> <key>C minor</key> <time> 2/4 </tirne>

<measure> <rest> qtr </rest> <notes> qtr G. qtr G. qtr G </notes></rneasure>

<measure> <notes> hif E </notes></measure>

</staff>

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

Обратите внимание, что наша система кодирования музыки выполнена в определенном стиле. Мы разделяем термины (называемые тегами), идентифицирующие компоненты, символами «<» и «>». Таким же образом мы обозначаем начало и конец структур (например, нотного стана, знаков при ключе, нот и тактов) — закрывающий тег отличается слэшем (то есть тег <measure> закрывается тегом </measure>). Внутри тегов мы тоже используем специальные атрибуты — выражения типа clef = "treble". Подобный стиль можно разработать и для представления других форматов, например математических выражений, медицинских диаграмм и целых веб-страниц.

Расширяемый язык разметки XML (extensible Markup Language) — это стандартизованный стиль (похожий на стиль в нашем музыкальном примере) для разработки систем обозначений и представления данных в виде текстовых файлов. (На самом деле XML — это упрощенный вариант более старого набора стандартов под названием Standard Generalized Markup Language, SGML.) Следуя стандартам XML, были разработаны системы обозначения, называемые языками разметки, для представления математических выражений (MathML), мультимедийных презентаций (SMIL), музыки (4ML) и веб-страниц (XHTML). (XHTML — это улучшенный вариант HTML, удовлетворяющий стандартам XML. Например, HTML предполагает, что начало нового параграфа, обозначаемое тегом <р>, завершает предыдущий параграф, но в XHTML перед началом нового параграфа необходимо явно завершать текущий параграф тегом <р>.)

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


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



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