adding bad-XML catch and error report
[migration-tools.git] / set_record_ids.pl
1 #!/usr/bin/perl
2 use MARC::Batch;
3 use MARC::Record;
4 use MARC::File::XML ( BinaryEncoding => 'utf-8' );
5 use MARC::Field;
6
7 my $initial_record_number = $ARGV[0];
8 my $record_tag_number = $ARGV[1];
9 my $record_tag_subfield = $ARGV[2];
10 my $count = 0;
11
12 binmode(STDOUT, ':utf8');
13 binmode(STDIN, ':utf8');
14
15 foreach $argnum ( 3 .. $#ARGV ) {
16
17         print STDERR "Processing " . $ARGV[$argnum] . ", starting record id at $initial_record_number\n";
18
19         my $batch = MARC::Batch->new('XML',$ARGV[$argnum]);
20         #$batch->strict_off();
21         #$batch->warnings_off();
22
23         while ( my $record = $batch->next() ) {
24
25         $count++;
26
27         print STDERR "WARNINGS: Record $count : " . join(":",@warnings) . " : continuing...\n" if ( @warnings );
28
29         while ($record->field($record_tag_number)) { $record->delete_field( $record->field($record_tag_number) ); }
30         my $new_id = $initial_record_number + $count - 1;
31         my $new_id_field = MARC::Field->new( $record_tag_number, ' ', ' ', $record_tag_subfield => $new_id);
32         $record->append_fields($new_id_field);
33
34         print $record->as_xml();
35         }
36
37     print STDERR "Processed $count records.  Last record id at " . ($initial_record_number + $count - 1) . "\n";
38 }