--- trunk/run.pl 2006/07/03 22:12:13 576 +++ trunk/run.pl 2006/07/04 10:34:15 578 @@ -13,13 +13,12 @@ use WebPAC::Normalize; use WebPAC::Output::TT; use WebPAC::Validate; +use WebPAC::Output::MARC; use YAML qw/LoadFile/; use Getopt::Long; use File::Path; use Time::HiRes qw/time/; use File::Slurp; -use MARC::Record 2.0; # need 2.0 for utf-8 encoding see marcpm.sf.net -use MARC::Lint; use Data::Dump qw/dump/; =head1 NAME @@ -145,8 +144,6 @@ my @links; my $indexer; -my $lint = new MARC::Lint if ($marc_lint); - while (my ($database, $db_config) = each %{ $config->{databases} }) { my ($only_database,$only_input) = split(m#/#, $only_filter) if ($only_filter); @@ -271,13 +268,11 @@ $log->info("Using $normalize_path for normalization..."); - my $marc_fh; - if (my $path = $normalize->{output}) { - open($marc_fh, '>', $path) || - $log->logdie("can't open MARC output $path: $!"); - - $log->info("Creating MARC export file $path", $marc_lint ? ' (with lint)' : '', "\n"); - } + my $marc = new WebPAC::Output::MARC( + path => $normalize->{output}, + lint => $marc_lint, + dump => $marc_dump, + ) if ($normalize->{output}); # reset position in database $input_db->seek(1); @@ -319,48 +314,12 @@ type => $config->{$use_indexer}->{type}, ) if ($indexer && $ds); - if ($marc_fh) { - my $marc = new MARC::Record; - $marc->encoding( 'utf-8' ); - my @marc_fields = WebPAC::Normalize::_get_marc_fields(); - if (! @marc_fields) { - $log->warn("MARC record $mfn is empty, skipping"); - } else { - $marc->add_fields( @marc_fields ); - - # tweak leader - if (my $new_l = WebPAC::Normalize::marc_leader()) { - - my $leader = $marc->leader; - - foreach my $o ( keys %$new_l ) { - my $insert = $new_l->{$o}; - $leader = substr($leader, 0, $o) . - $insert . substr($leader, $o+length($insert)); - } - $marc->leader( $leader ); - } - - if ($marc_lint) { - $lint->check_record( $marc ); - my $err = join( "\n", $lint->warnings ); - $log->error("MARC lint detected warning on MFN $mfn\n", - "<<<<< Original imput row:\n",dump($row), "\n", - ">>>>> Normalized MARC row: leader: [", $marc->leader(), "]\n", dump(@marc_fields), "\n", - "!!!!! MARC lint warnings:\n",$err,"\n" - ) if ($err); - } - - if ($marc_dump) { - $log->info("MARC record on MFN $mfn\n", - "<<<<< Original imput row:\n",dump($row), "\n", - ">>>>> Normalized MARC row: leader: [", $marc->leader(), "]\n", dump(@marc_fields), "\n", - ); - } - - print $marc_fh $marc->as_usmarc; - } - } + $marc->add( + id => $mfn, + fields => [ WebPAC::Normalize::_get_marc_fields() ], + leader => WebPAC::Normalize::marc_leader(), + row => $row, + ) if ($marc); $total_rows++; } @@ -368,7 +327,7 @@ $log->info("statistics of fields usage:\n", $input_db->stats) if ($stats); # close MARC file - close($marc_fh) if ($marc_fh); + $marc->finish if ($marc); }