adding compact score
[migration-tools.git] / 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 $record_id_file = $ARGV[0];
9 my %record_ids;
10
11 open FILE, $record_id_file;
12 while (my $record_id = <FILE>) {
13     chomp($record_id); $record_ids{ $record_id } = 1;
14 }
15 close FILE;
16
17 my $id_tag = $ARGV[1]; my $id_subfield = $ARGV[2];
18
19 binmode(STDOUT, ':utf8');
20 binmode(STDIN, ':utf8');
21
22 my $M;
23
24 foreach $argnum ( 3 .. $#ARGV ) {
25
26         print STDERR "Processing " . $ARGV[$argnum] . "\n";
27
28     open $M, '<:utf8', $ARGV[$argnum];
29
30         my $batch = MARC::Batch->new('XML',$M);
31         $batch->strict_off();
32         $batch->warnings_off();
33
34     my $count = 0;
35
36         while ( my $record = $batch->next() ) {
37
38         $count++;
39
40                 my $id = $record->field($id_tag);
41                 if (!$id) {
42                         print STDERR "ERROR: This record is missing a $id_tag field.\n" . $record->as_formatted() . "\n=====\n";
43                         next;
44                 }
45                 $id = $id->as_string($id_subfield);
46
47         if (defined $record_ids{ $id }) {
48             open FILE, ">$id";
49             binmode(FILE, ':utf8');
50             print FILE $record->as_xml();
51             close FILE;
52         }
53         }
54     print STDERR "Processed $count records.\n";
55 }