Вопросы программирования

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

В большинстве высокоуровневых языков есть операторы для управления последовательными файлами, содержащими текст. Эти операторы могут принимать форму запросов на выполнение предопределенных процедур, производящих желаемые операции. Например, может существовать эквивалент этого оператора на псевдокоде, который получает следующую логическую запись из файла Mail List и передает ее в переменную Mail Record: Применить процедуру ReadFile для получения MailRecord из файла MailList

Здесь мы предполагаем, что переменная MailRecord определена как неоднородный массив, компоненты которого представляют различные поля записи: Name (Имя), Address (Адрес), EmployeeNumber (Идентификатор) и т. д. В других случаях поля записи могут передаваться последовательно, как в следующем операторе на псевдокоде:

Применить процедуру ReadFile для получения Name. Address. EmpNum из файла MailList

Еще один способ чтения данных — посимвольно, как в операторе Применить процедуру GetCharacter для получения Symbol из файла DocumentFile где Symbol — это переменная символьного типа, или построчно, как в операторе

Применить процедуру ReadLine для получения TextLine из файла DocumentFile который получает из файла DocumentFile всю строку текста до маркера «конец строки» и передает ее в массив символов под названием TextLine.

Объектно-ориентированные языки программирования рассматривают файлы как объекты. В свою очередь, операторы передачи записей в последовательный файл и из него принимают форму сообщений соответствующим объектам. Например, программист мог бы использовать оператор, эквивалентный инструкции: Отправить сообщение ReadFile объекту MailList для получения MailRecord

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

Применить процедуру Write для помещения значения Length в файл TextFile

где Length — это переменная типа integer, a TextFi I e — это файл в кодировке ASCII. Для того чтобы записать в файл значение, назначенное переменной Length, его сначала необходимо преобразовать из двоичного дополнительного кода в символы кодов ASCII. Если говорить более точно, предположим, что каждое целое число представляется в двоичной системе двумя байтами и текущее значение Length равно 134. Тогда битовая комбинация для Length будет иметь вид

000000001О00О110

(это двоичное представление числа 134), но в файл должна быть записана битовая комбинация

(код ACSII для символа 1, за которым следует код ASCII для символа 3, и за ним — код ASCII для символа 4) (рис. 8.6).

Теперь рассмотрим процесс получения значения переменной Length из файла при помощи оператора, схожего с

Применить процедуру ReadFile для получения значения Length из файла TextFile

Для этого требуется чтение символов из файла TextFi I e, пока не появятся символы нужного значения, а затем построение представления соответствующего значения в двоичной форме и передача его в переменную Length.

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

Применить процедуру ReadFile для получения Name из файла KeyBoard

где Name — это переменная, обозначающая массив символов. Обратите внимание, что в следующем случае должно быть выполнено преобразование данных:

Применить процедуру ReadFile для получения Age из файла KeyBoard

где Age — это переменная типа integer. Если с клавиатуры ввели значение 34, операционная система преобразует нажатие клавиши в ASCII-коды символов 3 и

4. Эти текстовые данные должны быть преобразованы в двоичное представление числа 34 и переданы в переменную Age.

Семантическая сеть

С течением времени HTML развился в систему разметки документов согласно тому, как они должны быть представлены на мониторе компьютера или напечатаны. Например, ингредиенты в рецепте можно пометить так, чтобы каждый из них выводился на новой строке. Однако мы надеемся, что с появлением новых языков разметки на основе XML акцент будет делаться на семантику. Предположим, например, что ингредиенты в списке помечены тегами <ingredient> и </ingredient>, а не просто перечислены. Тогда можно написать программу для поиска рецептов, содержащих или не содержащих определенные ингредиенты. Это будет существенным улучшением существующего состояния дел, поскольку сейчас мы можем только выделить рецепты, содержащие или не содержащие определенные слова. Точнее, при помощи семантических тегов программа сможет найти рецепт лазаньи, не содержащей шпинат, тогда как схожая программа, основанная на словесном содержимом, пропустит рецепт, начинающийся словами «В этой лазанье нет шпината». Такого улучшения можно было бы добиться, если бы в Интернете были задействованы стандарты разметки документов согласно семантике, а не словесному содержанию, и в результате мы получили бы всемирную семантическую сеть.

Индексация

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


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



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