#!/usr/bin/perl # small script that dumps an iso2709 file. use strict; #use warnings; FIXME - Bug 2505 # Koha modules used use Koha::Script; use C4::Context; use MARC::File::USMARC; use MARC::Batch; use Getopt::Long qw( GetOptions ); use IO::File; my ( $input_marc_file, $number, $nowarning, $frameworkcode ) = ( '', 0 ); my $version; GetOptions( 'file:s' => \$input_marc_file, 'n:s' => \$number, 'v' => \$version, 'w' => \$nowarning, 'c' => \$frameworkcode, ); $frameworkcode = "" unless $frameworkcode; if ( $version || ( $input_marc_file eq '' ) ) { print <new($input_marc_file); # don't let MARC::Batch open the file, as it applies the ':utf8' IO layer my $batch = MARC::Batch->new( 'USMARC', $fh ); $batch->warnings_off() unless $nowarning; $batch->strict_off() unless $nowarning; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare("select tagfield,tagsubfield,tab from marc_subfield_structure where frameworkcode=?"); $sth->execute($frameworkcode); my %hash_unused; my %hash_used; while ( my ( $tagfield, $tagsubfield, $tab ) = $sth->fetchrow ) { $hash_unused{"$tagfield$tagsubfield"} = 1 if ( $tab eq -1 ); $hash_used{"$tagfield$tagsubfield"} = 1 if ( $tab ne -1 ); } my $i = 0; while ( my $record = $batch->next() ) { $i++; foreach my $MARCfield ( $record->fields() ) { next if $MARCfield->is_control_field(); # tag num < 10 if ($MARCfield) { foreach my $fields ( $MARCfield->subfields() ) { if ($fields) { if ( $hash_unused{ $MARCfield->tag() . @$fields[0] } >= 1 ) { $hash_unused{ $MARCfield->tag() . @$fields[0] }++; } if ( $hash_used{ $MARCfield->tag() . @$fields[0] } >= 1 ) { $hash_used{ $MARCfield->tag() . @$fields[0] }++; } } # foreach my $field (@$fields) { # warn "==>".$MARCfield->tag().@$fields[0]; # } } } } } print "Undeclared tag/subfields that exists in the file\n"; print "================================================\n"; foreach my $key ( sort keys %hash_unused ) { print "$key => " . ( $hash_unused{$key} - 1 ) . "\n" unless ( $hash_unused{$key} == 1 ); } print "Declared tag/subfields unused in the iso2709 file\n"; print "=================================================\n"; foreach my $key ( sort keys %hash_used ) { print "$key => " . ( $hash_used{$key} - 1 ) . "\n" if ( $hash_used{$key} == 1 ); } # foreach my $x (sort keys %resB) { # print "$x => ".$resB{$x}."\n"; # } print "\n==================\n$i record parsed\n";