9 use MARC::File::XML (BinaryEncoding => 'UTF-8');
12 MARC::Charset->assume_unicode(1);
13 MARC::Charset->ignore_errors(1);
15 binmode(STDIN, ':utf8');
16 binmode(STDOUT, ':utf8');
20 my ($delim, @fields) = (' \| ');
23 my $repository_code = 'Evergreen';
24 my $set_as_deleted = 0;
27 'delimiter=s' => \$delim,
28 'field=s' => \@fields,
29 'set_001_003' => \$set_001_003,
30 'repository_code=s' => \$repository_code,
31 'set_as_deleted' => \$set_as_deleted,
37 $partmap{$_} = $partcount;
41 print '<collection xmlns="http://www.loc.gov/MARC21/slim">';
46 my @values = split $delim;
49 for my $part (keys %partmap) {
50 ($partlist{tcn_value} = $values[ $partmap{tcn_value}]) =~ s/^\s*//o if ($part eq 'tcn_value');
51 ($partlist{tcn_source} = $values[ $partmap{tcn_source}]) =~ s/^\s*//o if ($part eq 'tcn_source');
52 ($partlist{id} = $values[ $partmap{id}]) =~ s/^\s*//o if ($part eq 'id');
53 ($partlist{deleted} = $values[ $partmap{deleted}]) =~ s/^\s*//o if ($part eq 'deleted');
54 $partlist{marc} = $values[ $partmap{marc}] if ($part eq 'marc');
56 $partlist{tcn_value} =~ s/\s*$//o if ($part eq 'tcn_value');
57 $partlist{tcn_source} =~ s/\s*$//o if ($part eq 'tcn_source');
58 $partlist{id} =~ s/\s*$//o if ($part eq 'id');
61 next unless ($partlist{marc});
62 next unless ($partlist{id} =~ /^\d+$/);
63 $partlist{marc} =~ s/<(\/?)marc:/<$1/go;
66 my $r = MARC::Record->new_from_xml($partlist{marc});
69 # XXX the following wil likely be subsumed by an in-db process, as the 901 was
71 my $old_001 = $r->field('001');
73 $old_001->update($partlist{id});
75 my $new_001 = new MARC::Field('001',$partlist{id});
76 $r->insert_fields_ordered($new_001);
78 my $old_003 = $r->field('003');
80 $old_003->update($repository_code);
82 my $new_003 = new MARC::Field('003',$repository_code);
83 $r->insert_fields_ordered($new_003);
87 if ($set_as_deleted && $partlist{deleted} eq 't') {
88 my $leader = $r->leader();
89 if (length($leader)>4) {
90 substr($leader,5,1,"d");
95 my $x = $r->as_xml_record;
100 print STDERR "\r$count" unless ($quiet || $count % 100);
103 warn "failed on record $., $partlist{marc}, for $@\n" if (!$quiet);
104 import MARC::File::XML; # reset SAX parser
108 print '</collection>';