Анимация
JavaScript
|
Главная Библионтека Обработка данных в Perl До сих пор мы рассматривали программы, в которых исходные данные вводились в процессе диалога с пользователем или из файла, а результат вычислений отображался на терминале. Но вы когда-нибудь задумывались над вопросом: "Что происходит с данными, полученными в результате работы программы, после ее завершения?" Ничего особенного, они попросту теряются, будто ничего и не было. Таким образом, при следующем запуске программы нужно начинать все вычисления сначала. Вот тут-то на помощь и приходят базы данных. Они используются для хранения данных, предназначенных для последующей обработки. Более того, правильно спроектированная база данных может использоваться многими программами для выполнения запросов, создания всевозможных отчетов и ввода данных. Перед разработкой базы данных вы должны тщательно продумать ее структуру и определить способы хранения данных. Есть еще одна немаловажная деталь, которую нужно иметь в виду, - метод доступа к данным: будет ли с базой данных работать один человек, или необходимо обеспечить доступ одновременно для нескольких пользователей. На этом занятии мы рассмотрим несколько способов хранения данных, предназначенных для дальнейшего использования. Основные темы этого занятия. • Создание DBM-файлов и хранение данных в них. • Использование в качестве базы данных обычного текстового файла. • Произвольный доступ к данным, хранящимся в файлах. • Блокировка данных в файле для предотвращения одновременного доступа к ним нескольких пользователей. Файлы DBM При программировании Perl использование DBM-файлов является самым простым способом хранения структурированных данных. Файлы DBM обладают одним замечательным свойством - в программах на Perl их можно напрямую связать с хэ- II. углублмся E Perl шем. При этом чтение и запись сводится к простым операциям с хэ- шем, о которых шла речь на 7-м занятии, "Хэши". Чтобы связать хэш с DBM-файлом, в Perl используется функция dbmopen, синтаксис которой выглядит так: dbmopen(хэя, имя файла, права доступа) В результате выполнения этой функции указанный вами хэш подключается к DBM-файлу. Параметр имя файла на самом деле определяет два файла на жестком диске: рад и Они используются Perl для хранения данных в иерархическом виде и быстрого доступа к ним. Эти файлы не являются текстовыми, поэтому их нельзя редактировать с помощью обычного текстового тора. Кроме того, не обращайте внимания, если один из файлов имеет нулевую длину или его размер слишком велик по сравнению с сохраненными в нем данными. Это вполне нормальное явление. Третий параметр функции dbmopen определяет права доступа, которые назначаются двум DBM-файлам при их создании. При работе в системе UNIX всегда используйте осмысленные значения праз доступа. Это позволит контролировать доступ к вашим DBM-файлам Например, значение кода прав доступа, равное 0666, обеспечивает доступ по чтению и записи к вашим DBM-файлам для всех пользователей данного компьютера; значение 0644 позволяет вам читать и записывать данные, в то время как для остальных пользователей обеспечивается только режим чтения. При работе в системе Windows данный параметр не играет особой роли, поскольку в ней не предусмотрены средства управления доступом. Поэтому всегда используйте значение 0666. Функция dbmopen возвращает истинное значение, если операция подключения хэша к DBM-файлу прошла успешно. А теперь давайте рассмотрим пример: dbmopen(%hash, -dbnflie, 0644) dig "01кбкапрн ащыпиПВМ-файла: $!"; После выполнения этого оператора устанавливается связь хэша с DBM- файлом dbmfile. Для хранения хэша на диске Perl создает два файла: dbrafile.pag и dbmfile.dir. Если в последующих операторах значение элементов хэша будет изменено (как показано ниже на примере), автоматически обновит соответствующие DBM-файлы: $hash{E0iia4bB}=K0BEa; 5hash{собачьи}=co6ai!:a"; Обращение к элементам хэша автоматически приводит к считыванию информации из DBM-файла, например: print $hash{собачьи}; Чтобы разорвать связь хэш ash с DBM-файлом, используется функция tibmclose: dbmclOBe(thaBh); После выполнения этой функции элементы хэша шчьи и чьи останутся в DBM-файле. В результате нри следующем запуске программы и связывании хэша %hash с DBM-файлами значение указанных элементов хэша будет восстановлено. С хэшами, связанными с DBM-файлами, можно выполнять те же операции, что и с обычными хэшами, например использовать функции keys, values и delete. Чтобы очистить хэш (и соответственно присвойте ему пустой список, как пока- зано ниже: 15-й час. Обработка дак 231 %liasi2=(); Чтобы инициализировать хэш и соответствующий ем Ш-файл, после выполнения функции dbmopen присвойте ей нужные значения в списке. Некоторые важные замечания В этом разделе мы приведем несколько полезных замечаний, которые нужно иметь в виду при связывании хэша с DBM-файлом. • Ограничение на длину ключей и данных. Хотя не накладывается никаких специальных ограничений на длину ключей и данных хэша, тем не менее, при связывании с DBM-файлом суммарный размер одного ключа и хранимых в нем данных не должен превышать 1Q24 символа. Это ограничение обусловлено структурой DBM-файла. На общее число ключей в хэше не накладывается никаких ограничений, оно зависит только от типа используемой файловой системы. • После выполнения функции dbmopen первоначальные значения элементов хэша теряются. Поэтому лучше всего для операции связывания выбирать чистыйхэш. Рассмотрим следующий пример: «h=(); $h{одиогорбые}="верблюд; dbmopenftb, "dbnfil" Ж4) die -ошибка щк отарнФяи ГШ-айта: $1"; print $h{ одногорбые}; t Нижго ж будет ШЕвтаганэ dbmcloee(th); В этом примере после выполпепия функции dbmopen ключ одногорбые хэща теряется. • После выполнения функции lose значения ключей связанного хэша теряются. Вот пример: dbmopen(th, "dbmfiLe", 0644) 11 die "01к6ка при отхрнтня ОВМ-фа£па: $ 1"; Sh{ парнокопытвые }=корова"; dbniclose(»h); pcln пытяые], ььрзего не чазв В этом примере новый ключ парнокопьпные будет добавлен к DBM-файлу. Однако после выполнения функции все ключи связанного хэша те- ряются, а хэш полностью очищается. Обработка больших DBM-файлов Предположим, что некоторый хэщ связан с DBM-файлом. Для определенности будем считать, что вы нищете на Perl программу, которая сохраняет в файле сведения о сотрудниках: фамилия, должность, номер телефона и др. Очевидно, что если сотрудников достаточно много, то через некоторое время ваш хэш станет очень большого размера. Причина заключается в том, что каждый раз при запуске программы ее значения восстанавливаются из DBM-файла, добавляются в хэш и снова записываются в файл при завершении программы. Таким образом, если вы не предпримете специальных действий, значения из вашего хэша никогда не будут автоматически удаляться. 232 Чть П. углубляемся 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 |