=head1 NAME
MARC::Errorchecks -- Cross-field error checks for MARC records according to MARC21, AACR2R, and LCRI rules.
=head1 DESCRIPTION
Module for storing MARC error-checking subroutines,
based on MARC21, AACR2R, and LCRIs.
These are used to find errors not easily checked by
the MARC::Lint and MARC::Lintadditions modules,
such as those that cross field boundaries.
Each subroutine should generally be passed a MARC::Record object.
Returned warnings/errors are generated as follows:
push @warningstoreturn, join '', ($field->tag(), ": [ERROR TEXT]\t");
return \@warningstoreturn;
=head2 DISTRIBUTION CONTENTS
In lib/ directory:
MARC::BBMARC (v. 1.07)-- Collection of misc. subs used by the scripts in the bin/ directory.
This may be added as a separate module distribution in the future, possibly under a different name.
In the bin/ directory:
-bin/Lintallchecks.pl -- Uses MARC::Lint, MARC::Lintadditions, and MARC::Errorchecks
to look for MARC21, AACR2/LCRI coding problems in a file of MARC21 records.
MARC code list cleanup scripts (for generating the DATA section of MARC::Errorchecks and MARC::Lintadditions):
(Require ASCII version of code lists, L)
-bin/countrycodelistclean.pl--L
-bin/gaccleanupscript.pl--L
-bin/languagecodelistclean.pl--L
Other possibly useful scripts:
(All require MARC::BBMARC, available from L)
-bin/003cleanupscript.pl -- Compares 001 and 003 fields, cleans mismatched 003s and outputs to MARC-format file and reports unmatched 003s.
-bin/007cleanupscript.pl -- Check validity of each 007 value (uses MARC::Lintadditions).
Reports any records needing manual correcting (outputs these to file).
Cleans fields with valid values, but that are too long, and outputs these to separate file.
-bin/010cleanupscript.pl -- Fixes spacing problems in 010 subfield a.
-bin/cleantrailingspaces.pl -- Looks for extra spaces at the end of fields greater than 010 (ignores 016), removes unnecessary spaces, outputs records that have been cleaned.
=head1 SYNOPSIS
use MARC::Batch;
use MARC::Errorchecks;
#See also MARC::Lintadditions for more checks
#use MARC::Lintadditions;
#change file names as desired
my $inputfile = 'marcfile.mrc';
my $errorfilename = 'errors.txt';
my $errorcount = 0;
open (OUT, ">$errorfilename");
#initialize $infile as new MARC::Batch object
my $batch = MARC::Batch->new('USMARC', "$inputfile");
my $errorcount = 0;
#loop through batch file of records
while (my $record = $batch->next()) {
#if $record->field('001') #add this if some records in file do not contain an '001' field
my $controlno = $record->field('001')->as_string(); #call MARC::Errorchecks subroutines
my @errorstoreturn = ();
# check everything
push @errorstoreturn, (@{MARC::Errorchecks::check_all_subs($record)});
# or only a few
push @errorstoreturn, (@{MARC::Errorchecks::check_010($record)});
push @errorstoreturn, (@{MARC::Errorchecks::check_bk008_vs_bibrefandindex($record)});
# report results
if (@errorstoreturn){
#########################################
print OUT join( "\t", "$controlno", @errorstoreturn, "\t\n");
$errorcount++;
}
} #while
=cut