X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=marc_cleanup;h=58a68c163e0786ee2ef20ce154ce2de3f3b1e398;hp=2c3a005df8e9566383aca6d37144077af5cc29f4;hb=234d6c986f42cb7c245205bb299fa2c9d204e52a;hpb=583e4b7c22ba15f37168c0deb49728929a65e6fe
diff --git a/marc_cleanup b/marc_cleanup
index 2c3a005..58a68c1 100755
--- a/marc_cleanup
+++ b/marc_cleanup
@@ -93,7 +93,7 @@ while ( buildrecord() ) {
until ($ptr == $#record) {
# get datafield/tag data if we have it
$rc = stow_record_data() if ($c->{'renumber-from'} and $c->{'original-tag'});
- return $rc if $rc;
+ next if $rc;
# naked ampersands
if ($record[$ptr] =~ /&/ && $record[$ptr] !~ /&\w+?;/)
@@ -111,11 +111,11 @@ while ( buildrecord() ) {
# subfields can't be non-alphanumeric
if ($record[$ptr] =~ /{'force-utf8'}) {
+ if ($record[$ptr] =~ m|(.........).(.+)|) {
+ $record[$ptr] = "$1a$2\n";
+ }
+ }
if ($record[$ptr] =~ m|(.+?)|) {
+ $record[$ptr] =~ s|\s{10,}||;
+ message("Trailing whitespace trimmed from subfield contents");
+ }
+
# automatable subfield maladies
- $record[$ptr] =~ s/code=" ">c/code="c">/;
- $record[$ptr] =~ s/code=" ">\$/code="c">\$/;
+ if ($record[$ptr] =~ /code=" ">c/) {
+ message('Fixing probable subfield c, scenario 1');
+ $record[$ptr] =~ s/code=" ">c/code="c">/;
+ }
+ if ($record[$ptr] =~ /code=" ">\$/) {
+ message('Fixing probable subfield c, scenario 2');
+ $record[$ptr] =~ s/code=" ">\$/code="c">\$/;
+ }
+
+ if ($c->{'fix-subfield'}) {
+ if ($record[$ptr] =~ /code="&">/) {
+ message('Fixing & for subfield code');
+ $record[$ptr] =~ s/code="&">/code="$c->{'fix-subfield'}">/;
+ }
+ if ($record[$ptr] =~ /code="(.*?\P{IsAlnum}.*?)">/) {
+ message("Fixing non-alphanumeric subfield code: $1 -> " . $c->{'fix-subfield'});
+ $record[$ptr] =~ s/code=".*?\P{IsAlnum}.*?">/code="$c->{'fix-subfield'}">/;
+ }
+ if ($record[$ptr] =~ /code="">/) {
+ message('Fixing null subfield code');
+ $record[$ptr] =~ s/code="">/code="$c->{'fix-subfield'}">/;
+ }
+ }
}
return 0;
}
@@ -316,7 +348,7 @@ sub buildrecord {
my $istrash = 0;
my $trash = $c->{trash};
- $l = while (defined $l and $l !~ //);
+ $l = while (defined $l and $l !~ /{ricount}++;
@@ -609,6 +641,8 @@ sub initialize {
'renumber-subfield|rs=s',
'original-tag|ot=i',
'original-subfield|os=s',
+ 'fix-subfield|fs=s',
+ 'force-utf8',
'script',
'no-strip9',
'trashfile|t=s',
@@ -672,13 +706,17 @@ Options
and renumbering is in effect, an old-to-new mapping
file (old2new.map) will be generated.
- --autoscrub -a Automatically remove non-numeric tags in data
- --nocollapse -n Don't compress records to one line on output
- --no-strip9 Don't autoremove 901/903 tags in data
- --trashfile -t File containing trash tag data (see --trashhelp)
-
- --fullauto No manual edits. All problematic records dumped to
- exception file.
+ --force-utf8 Rewrite each record so that they describe themselves as
+ UTF-8 encoded
+ --autoscrub -a Automatically remove non-numeric tags in data
+ --fix-subfield -fs Subfield code to use in place of non-alphanumeric
+ or empty subfield codes
+ --nocollapse -n Don't compress records to one line on output
+ --no-strip9 Don't autoremove 901/903 tags in data
+ --trashfile -t File containing trash tag data (see --trashhelp)
+
+ --fullauto No manual edits. All problematic records dumped to
+ exception file.
HELP
exit;