Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [ 73 ] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

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

• Строка 27. Строка 25 является продолжением оператора if, начало которого находится в 11 строке. В ней проверяется, соответствует ли введенная строка формату .X is Y. При положительном ответе часть X запоминается в неременной $sub ject, а часть Г - в $info.

• Строка 28. Информация, находящаяся в неременной $inf о, запоминается в хэше в ключе, имя которого находится в переменной

• Строка 34. С помощью функции cloae разрывается связь хэшммегз с DBM-файлом.

Использование текстовгх файлов в качестве базы даннгх

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

Начнем с хорошего. Использование текстовых файлов для хранения баз данных имеет несколько неоспоримых преимуществ перед более сложными альтернативами, такими как DBM-файлы или системы управления большими базами данных типа Oracle и Sybase. Ниже перечислены некоторые из основных преимуществ текстовых файлов.

• Базы данных, хранящиеся в текстовых файлах, являются переносимыми. Их можно без всяких проблем использовать практически на любой компьютерной платформе.

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

• Текстовые файлы баз данных очень просто создавать, а также вносить в них первоначальные данные.

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

А теперь, как вы могли догадаться, настала очередь поговорить о плохом. Чтобы

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

операционной системы текстовый файл базы данных ничем не отличается от обычного файла - потока текстовых символов, разбитого на строки. Давайте рассмотрим пример простейшей текстовой базы данных.

Борис 555-1212

Мария 555-Q912



1Ешеп 555-0012 Спыа 555-1Л90

Этот файл базы данных хранится на диске в виде непрерывного потока символов: Борнс1про6еп]555-12121новая строка]Нария[пробег]555-0912[новая строка] ."

В этом потоке элементы [пробел] и [новая строка] представляют зависимые от конкретной операционной системы признаки пробела и новой строки. Например, в качестве признака новой строки в разных операционных системах может использоваться либо символ перевода строки, либо символ возврата каретки, либо их комбинация.

Другими словами, символы всех полей и всех записей файла базы данных упакованы в один сплошной поток байтов файла. Правда, стоит отметить, что подобные файлы

отображаются в текстовом редакторе, распечатываются на принтере и представляются Perl в удобном для восприятия человеком виде.

А теперь, после того как вы познакомились со структурой текстовых баз данных, давайте обсудим некоторые их недостатки.

• В середину текстового файла нельзя вставить новые данные. При вставке

новых записей файл нужно полностью или частично обновлять. Поэтому

вставка данных в начало или середину файла автоматически вызывает перезапись расположенных следом данных. Предположим, например, что после записи Борис 555-1212 пеобходимо вставить запись Сфгей 555-613. В результате данные Мария[пробел]555-0912[новая строка] ... нужно сдвинуть к концу файла так, чтобы после записи Борис 555-1212 образовалось место для новой записи Сергей 555-613:

Борис[пробел]555-1212[иоваястрока]СергеЙ[пробея]555-613[новая строка] Нария[пробеп]555-0912[новая сгрска] ...

Таким образом, видно, что вставка записей в середину текстовой базы данных - довольно медленная и не лишенная ошибок операция (особенно при

больших размерах файлов). При сбое в момент перезаписи файла может

произойти частичная или полная потеря данных.

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

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

Борис[пробел]555-1212[новая строка]Павел[пробел]555-О012[новая строка] Ольга[пробел]555-1190[новая слрска]

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



Вставка и удаление записей из текстового файла

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

Например, если база данных имеет вид

Борис 555-1212 Мария 555-Q912 Павел 555-QQ12 Оль 555-119Q

и сохранена в текстовом файле под именем phone.txt, то написать на Perl короткую программу, загружающую содержимое файла в массив, совсем несложно. Вот один из вариантов программы:

»!/usr/bin/perl -W

use strict;

sub readdata {

open(PH, "phDne.txt") I I

die "01к&апря слчьпки pJxne.txt: $1"; my(§DATA)=<PH>; cimpgDATA; closetPE); return (ШТА) ;

В этом примере функции ata() предназначена для считывания файла phone.txt и помещения его содержимого в массив При из элементов массива удаляются

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

subvritedata {

ореЕ(РН, ">iiaie.tod;") II

die "QiK&a щк открыма jhcne.txt: $1";

foreach(§DATA) { pdut PH "$ \n";

close(PH);

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

этого для работы с массивом можно использовать функции push, unshift или splice.

Завершив все операции с массивом, для сохранения информации в файле вызовите функцию writedataO, как показано в следующем примере:

§PHONELIST=readdata{); ♦ Поместить все записи базы данных

} в массив SPHONELIST push(§PHONELIST, "Анна 555-1314"); writedata{ePHOSELIST); f Записать массив в файл

238 Ча fr. углубляемся e Perl



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [ 73 ] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122