#!/usr/bin/perl -w
use strict;
-use OpenIsis;
+use IsisDB;
use Getopt::Std;
use Data::Dumper;
use XML::Simple;
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});
}
}
}
- # 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") {
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);
}
}