license and environment
[migration-tools.git] / spit_csv.pl
1 #!/usr/bin/perl
2 use MARC::Batch;
3 use MARC::File::XML ( BinaryEncoding => 'utf-8' );
4 #use MARC::Field;
5 use Unicode::Normalize;
6
7
8 my @desired_tags_subfields = ();
9 foreach my $argnum ( 1 .. $#ARGV) {
10     print STDERR $ARGV[$argnum] . "\n";
11     push @desired_tags_subfields, $ARGV[$argnum];
12 }
13
14 my $count = 0;
15
16 binmode(STDOUT, ':utf8');
17 binmode(STDIN, ':utf8');
18
19 foreach my $argnum ( 0 .. 0 ) {
20
21         print STDERR "Processing " . $ARGV[$argnum] . "\n";
22
23     #my $M;
24     #open $M, '<:utf8', $ARGV[$argnum];
25     #my $batch = MARC::Batch->new('XML',$M);
26     my $batch = MARC::Batch->new('XML',$ARGV[$argnum]);
27
28         $batch->strict_off();
29         $batch->warnings_off();
30
31         while ( my $record = $batch->next() ) {
32
33         $count++;
34
35                 print STDERR "WARNINGS: Record $count : " .  join(":",@warnings) . " : continuing...\n" if ( @warnings );
36
37         my $first = 1;
38         for (my $i = 0; $i < scalar(@desired_tags_subfields); $i+=2) {
39                     my @tags = (); 
40             if ($record->field($desired_tags_subfields[$i])) { 
41                 @tags = $record->field($desired_tags_subfields[$i]); 
42             }
43             if (scalar(@tags)>1) { 
44                 die "Multiple $desired_tags_subfields[$i]\n"; 
45             } elsif (scalar(@tags)==0) { 
46                 print STDERR "Record $count missing $desired_tags_subfields[$i]\n"; 
47                 goto END_OF_WHILE; 
48             }
49             foreach my $f ( @tags ) { 
50                 if ($f->subfield($desired_tags_subfields[$i+1])) { 
51                     if ($first) {
52                         $first = 0;
53                     } else {
54                         print STDOUT "\t";
55                     }
56                     print STDOUT $f->subfield($desired_tags_subfields[$i+1]);
57                 } 
58             }
59         }
60         print STDOUT "\n";
61         END_OF_WHILE:
62         }
63         print STDERR "Processed $count records\n";
64 }