MARC::Charset->ignore_errors(1);
-my ($id_field, $count, $user, $password, $config, $keyfile, @files, @trash_fields) =
- ('998', 1, 'admin', 'open-ils', '/openils/conf/bootstrap.conf');
+my ($utf8, $id_field, $count, $user, $password, $config, $keyfile, @files, @trash_fields) =
+ (0, '998', 1, 'admin', 'open-ils', '/openils/conf/bootstrap.conf');
GetOptions(
'startid=i' => \$count,
my %source_map = (
o => 'OCLC',
i => 'ISxN',
- l => 'Local',
+ l => 'LCCN',
s => 'System',
g => 'Gutenberg',
);
$batch->warnings_off();
my $starttime = time;
-while ( my $rec = $batch->next ) {
-
+my $rec;
+while ( try { $rec = $batch->next } otherwise { $rec = -1 } ) {
+ next if ($rec == -1);
my $id;
- my $field = $rec->field($id_field);
- if ($field) {
- if ($field->is_control_field) {
- $id = $field->data;
- } else {
- $id = $field->subfield('a');
+ if ($id_field) {
+ my $field = $rec->field($id_field);
+ if ($field) {
+ if ($field->is_control_field) {
+ $id = $field->data;
+ } else {
+ $id = $field->subfield('a');
+ }
}
- } else {
- $id = $count;
}
- if ($id =~ /(\d+)/o) {
+ if ($id && $id =~ /(\d+)/o) {
$id = $1;
+ } else {
+ $id = $count;
}
if ($keyfile) {
my ($id, $source, $value);
+ if (!$id) {
+ my $f = $rec->field($id_field);
+ $id = $f->subfield('a') if ($f);
+ }
+
if (!$id) {
my $f = $rec->field('001');
$id = $f->data if ($f);
if (!$id) {
my $f = $rec->field('000');
- $id = 'g'.$f->data if ($f);
- $source = 'g';
+ $id = $f->data if ($f);
+ $source = 'g'; # only PG seems to use this
}
if (!$id) {
$source = 'l';
}
- if (!$id) {
- my $f = $rec->field($id_field);
- $id = $f->subfield('a') if ($f);
- $source = 's';
- }
-
if (!$id) {
$count++;
warn "\n !!! Record with no TCN : $count\n".$rec->as_formatted;
$id =~ s/\s*$//o;
$id =~ s/^\s*//o;
- $id =~ s/(\S+)$/$1/o;
+ $id =~ s/^(\S+).*$/$1/o;
$id = $source.$id if ($source);