From: Dobrica Pavlinusic Date: Sat, 1 Jan 2005 19:01:55 +0000 (+0000) Subject: use IsisDB module instead of OpenIsis -- this will fix various problems in X-Git-Url: http://git.rot13.org/?p=webpac;a=commitdiff_plain;h=1e535b793ce55124ab15c31a3cc22117fb258cb8 use IsisDB module instead of OpenIsis -- this will fix various problems in index generation becasue IsisDB doesn't have problems as OpenIsis perl bindings does. git-svn-id: file:///home/dpavlin/private/svn/webpac/trunk@622 13eb9ef6-21d5-0310-b721-a9d68796d827 --- diff --git a/all2xml.pl b/all2xml.pl index b7107e7..3f6f902 100755 --- a/all2xml.pl +++ b/all2xml.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use OpenIsis; +use IsisDB; use Getopt::Std; use Data::Dumper; use XML::Simple; @@ -720,66 +720,21 @@ print STDERR "using: $type...\n"; my $isis_db = $cfg -> val($database, 'isis_db') || die "$database doesn't have 'isis_db' defined!"; $import2cp = Text::Iconv->new($config->{isis_codepage},$codepage); - my $db = OpenIsis::open( $isis_db ); - - # check if .txt database for OpenIsis is zero length, - # if so, erase it and re-open database - sub check_txt_db { - my $isis_db = shift || die "need isis database name"; - my $reopen = 0; - - if (-e $isis_db.".TXT") { - print STDERR "WARNING: removing $isis_db.TXT OpenIsis database...\n"; - unlink $isis_db.".TXT" || warn "FATAL: unlink error on '$isis_db.TXT': $!"; - $reopen++; - } - if (-e $isis_db.".PTR") { - print STDERR "WARNING: removing $isis_db.PTR OpenIsis database...\n"; - unlink $isis_db.".PTR" || warn "FATAL: unlink error on '$isis_db.PTR': $!"; - $reopen++; - } - return OpenIsis::open( $isis_db ) if ($reopen); - } - - # EOF error - if ($db == -1) { - $db = check_txt_db($isis_db); - if ($db == -1) { - print STDERR "FATAL: OpenIsis can't open zero size file $isis_db\n"; - next; - } - } + my $db = new IsisDB( isisdb => $isis_db ); - # OpenIsis::ERR_BADF - if ($db == -4) { - print STDERR "FATAL: OpenIsis can't find file $isis_db\n"; - next; - # OpenIsis::ERR_IO - } elsif ($db == -5) { - print STDERR "FATAL: OpenIsis can't access file $isis_db\n"; - next; - } elsif ($db < 0) { - print STDERR "FATAL: OpenIsis unknown error $db with file $isis_db\n"; - next; - } - - my $max_rowid = OpenIsis::maxRowid( $db ); - - # if 0 records, try to rease isis .txt database - if ($max_rowid == 0) { - # force removal of database - $db = check_txt_db($isis_db); - $max_rowid = OpenIsis::maxRowid( $db ); - } + my $max_rowid = $db->{'maxmfn'} || die "can't find maxmfn"; print STDERR "Reading database: $isis_db [$max_rowid rows]\n"; my $path = $database; for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) { - my $row = OpenIsis::read( $db, $row_id ); - if ($row && $row->{mfn}) { - + my $row = $db->to_hash( $row_id ); + if ($row) { + + $row->{mfn} = $row_id; + $row->{record} = $db->{record}; + progress($row->{mfn}, $max_rowid); my $swishpath = $path."#".int($row->{mfn}); @@ -793,10 +748,6 @@ print STDERR "using: $type...\n"; } } } - # for this to work with current version of OpenIsis (0.9.0) - # you might need my patch from - # http://www.rot13.org/~dpavlin/projects/openisis-0.9.0-perl_close.diff - OpenIsis::close($db); print STDERR "\n"; } elsif ($type_base eq "excel") { diff --git a/isis_sf.pm b/isis_sf.pm index 49b2081..f118318 100644 --- a/isis_sf.pm +++ b/isis_sf.pm @@ -15,14 +15,12 @@ sub isis_sf { if ($row->{$isis_id}->[$i]) { if (! $subfield) { # subfield list undef, empty or no defined subfields for this record - my $all_sf = $row->{$isis_id}->[$i]; - $all_sf =~ s/\^./ /g; # nuke definitions + my $all_sf = $row->{record}->{$isis_id}->[$i]; + $all_sf =~ s/\^./ /g; # nuke definitions return $all_sf; } - my $sf = OpenIsis::subfields($row->{$isis_id}->[$i]); - if ($sf->{$subfield}) { - return $sf->{$subfield}; - } + my $sf = $row->{$isis_id}->[$i]->{$subfield}; + return $sf if ($sf); } }