user_library field
[migration-tools.git] / dump_inverse_select_marc.pl
1 #!/usr/bin/perl
2 use open ':utf8';
3 use MARC::Batch;
4 use MARC::Record;
5 use MARC::File::XML ( BinaryEncoding => 'utf-8' );
6 use MARC::Field;
7
8 my $format = $ARGV[0];
9
10 my $record_id_file = $ARGV[1];
11 my %record_ids;
12
13 open FILE, $record_id_file;
14 while (my $record_id = <FILE>) {
15     chomp($record_id); $record_ids{ $record_id } = 1;
16 }
17 close FILE;
18
19 my $id_tag = $ARGV[2]; my $id_subfield = $ARGV[3];
20
21 binmode(STDOUT, ':utf8');
22 binmode(STDIN, ':utf8');
23
24 my $M;
25
26 foreach $argnum ( 4 .. $#ARGV ) {
27
28         print STDERR "Processing " . $ARGV[$argnum] . "\n";
29
30     open $M, '<:utf8', $ARGV[$argnum];
31
32         my $batch = MARC::Batch->new('XML',$M);
33         $batch->strict_off();
34         $batch->warnings_off();
35
36     my $count = 0;
37
38         while ( my $record = $batch->next() ) {
39
40         $count++;
41
42                 my $id = $record->field($id_tag);
43                 if (!$id) {
44                         print STDERR "ERROR: This record is missing a $id_tag field.\n" . $record->as_formatted() . "\n=====\n";
45                         next;
46                 }
47                 $id = $id->as_string($id_subfield);
48
49         if (! defined $record_ids{ $id }) {
50             if ($format eq 'text') {
51                 print STDOUT '=-' x 39 . "\n";
52                 print STDOUT $record->as_formatted() . "\n";
53             } else {
54                 print STDOUT $record->as_xml() . "\n";
55             }
56         }
57         }
58     print STDERR "Processed $count records.\n";
59 }