5 use MARC::File::XML ( BinaryEncoding => 'utf-8' );
8 my $inverse = $ARGV[0] eq "inverse";
10 my $record_id_file = $ARGV[1];
13 open FILE, $record_id_file;
14 while (my $record_id = <FILE>) {
15 chomp($record_id); $record_ids{ $record_id } = 1;
19 my $id_tag = $ARGV[2]; my $id_subfield = $ARGV[3];
21 binmode(STDOUT, ':utf8');
22 binmode(STDIN, ':utf8');
26 foreach $argnum ( 4 .. $#ARGV ) {
28 print STDERR "Processing " . $ARGV[$argnum] . "\n";
30 open $M, '<:utf8', $ARGV[$argnum];
32 my $batch = MARC::Batch->new('XML',$M);
34 $batch->warnings_off();
38 while ( my $record = $batch->next() ) {
42 my $id = $record->field($id_tag);
44 print STDERR "ERROR: This record is missing a $id_tag field.\n" . $record->as_formatted() . "\n=====\n";
47 $id = $id->as_string($id_subfield);
50 ( ! $inverse && defined $record_ids{ $id } ) ||
51 ( $inverse && ! defined $record_ids{ $id } )
53 open FILE, ">$id.txt";
54 binmode(FILE, ':utf8');
55 print FILE $record->as_formatted();
59 print STDERR "Processed $count records.\n";