use XBase; # модуль работы с БД в формате DBF
my $table = XBase->create( # метод создания таблицы
"name" => "mollusc.dbf", # имя файла
# имена полей (колонок, столбцов) таблицы:
"field_names" => ["ID", "NAME", "LATIN", "AREA"],
# типы данных (N - число, C - строка, D - дата):
"field_types" => [ "N", "C", "C", "C"],
# максимальные длины полей:
"field_lengths" => [ 5, 35, 30, 45],
# длины дробной части (для чисел):
"field_decimals" => [ 0, undef, undef, undef]
);
$table->close(); # метод закрытия файла БД
Далее потребуется программа добавления данных в созданную таблицу из текстового файла. Например, такая:
use XBase; # модуль работы с БД в формате DBF
my $table = new XBase "mollusc.dbf" # конструктор DBF
or die Xbase->errstr; # обработка ошибок
my $recno = 0; # добавляемые записи нумеруются с нуля
open my $text, '<', 'mollusc.txt' or die; # файл, откуда
while (my $data = <$text>) { # читаем данные,
chomp($data); # удаляя \n
# и разбивая строку на поля по разделителю ';':
my ($id, $name, $latin, $area) = split(';', $data);
# добавляем запись, указывая поля в порядке создания
$table->set_record($recno, $id, $name, $latin, $area);
$recno++; # и увеличиваем счетчик записей
}
close $text; # закрываем тестовый файл
$table->close(); # и файл базы данных
Модуль XBase предоставляет все необходимые методы для работы с таблицами баз данных. Многие из них основаны на возможности произвольного доступа к любой записи DBF-файла по ее номеру. Например, таким образом можно прочитать, изменить или удалить запись по номеру
# считать запись в хэш, с доступом к нему по ссылке:
my $hash_ref = $table->get_record_as_hash($record_number);
# изменить значение поля NAME на
$table->update_record_hash($record_number, 'NAME' => $new);
# пометить запись как логически удаленную
$table->delete_record($record_number);
# восстановить логически удаленную запись
$table->undelete_record($record_number);
По поводу двух последних операций нужно сделать следующее пояснение. Дело в том, что записи в DBF-файле не удаляются физически, а только помечаются как удаленные. "Логически" удаленные записи игнорируются при обработке данных, но существуют в таблице "физически". Поэтому запись, помеченную как удаленная, можно восстановить для дальнейшей обработки. Один из способов прочитать записи таблицы - выбрать их во временный список записей, называемый курсором, откуда последовательно извлекать их в цикле. Это делается так:
my $cursor = $table->prepare_select("NAME", "LATIN", "AREA");
while (my @record = $cursor->fetch) { # прочитать запись
print "@record\n"; # обработать запись
}
В модуле XBase реализовано много других методов для работы с DBF-файлами и дополняющими их индексными файлами, которые предназначены для организации быстрого поиска записей в таблице.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии