Проект ACIS: содержание, old manual.
Последнее обновление: 2004-09-03 13:58
Collection-класс помогает RePEc-Index разбираться в файлах разного рода. Collection представляет какой-то набор файлов со своим форматом и правилами.
Когда RePEc-Index надо обработать определённый файл в определённой коллекции, он сначала создаст объект коллекции. (…) Потом он будет делать примерно следующее:
my $t = $collection->open_data_file( $filename );
if ( not $t ) { return 0; }
while( 1 ) {
my ( $id, $record, $type, $position, $checksum ) = $collection -> get_next_record() ;
last if not $record; # get_next_record did not return the record
# now go check the record id
if( not $collection -> check_id( $id ) ) {
# ignore bad record
next;
}
# further processing of the record
…
}
Так что всего-то надо определить несколько методов. Если вы наследуете от RePEc::Index::Collection. И вы лучше наследуйте.
Метод должен возвращать ссылку на функцию, которая будет решать: обрабатывать файл или нет. То есть перед тем, как изучать судьбу и содержимое файла, RePEc-Index сделает так:
my $file_check = $collection -> monitor_file_checker();
my @files = readdir DIR;
foreach ( @files ) {
…
my $_ = $relative_filename;
if ( &$file_check () ) {
### process file, take notes about it and so on
…
} else {
### just ignore it
}
}
Эта самая функция должна смотреть в переменную $_, и вернуть true или false, в зависимости от того, актуален или нет этот файл для этой коллекции. В $_ будет относительное имя файла, относительно вершины коллекции.
Аналогично, только для директорий.
Метод получает имя файла, пытается его открыть и возвращает положительное (true) значение, если всё в порядке. Если читать файл не получается, возвращает false.
Извлечь из ранее открытого файла запись и вернуть её. Возвращает undef, если записей в файле больше нет, или массив, описывающий запись: ( ID, REC, TYPE, POS, CHECKSUM ).
Это вспомогательный метод для контроля за некачественными данными. Получает в качестве параметра идентификатор записи и возвращает логическое значение. Должен вернуть true, если идентификатор нормальный и запись должна дальше обрабатываться.
Мне почему-то был нужен этот метод для обработки RePEc-данных. …?!
Вот и всё. См. файл RePEc/Index/Collection.pm и файл RePEc/Index/Collection/RePEc.pm в качестве примера Collection-класса. А ещё: RePEc/Index/Collection/RePEcRec.pm, который делает из ReDIF-шаблонов записи, совместимые с ARDB.