From: Galen Charlton Date: Wed, 17 Mar 2010 19:20:33 +0000 (+0000) Subject: normalize output by escaping backslashes X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=commitdiff_plain;h=c2cc24f41f265b854b3cf05f8d51218647634251 normalize output by escaping backslashes This allows psql to import the data correctly; use the new --disable-pg-normalization option to disable this behavior if the output is not meant to go directly into a Pg database via copy or \copy --- diff --git a/extract_holdings b/extract_holdings index fb44929..51ea2b8 100755 --- a/extract_holdings +++ b/extract_holdings @@ -105,7 +105,7 @@ sub extract_holdings { next if $m->first_only($rec->{tags}[$tag_idx]{tag}, $sub) and ($k > 1); for my $value ( @{$rec->{tags}[$tag_idx]{multi}{$sub}} ) { my $fh = $MULTIFILE{"$othertag$sub"}; - print $fh join("\t", $rec->{egid}, $j, $value), "\n"; + print $fh normalize_output(join("\t", $rec->{egid}, $j, $value)), "\n"; } } } @@ -113,7 +113,7 @@ sub extract_holdings { # and dump it print HOLDINGS "\n" unless $j; - print HOLDINGS join("\t", @out); + print HOLDINGS normalize_output(join("\t", @out)); print HOLDINGS "\n"; $j++; } @@ -217,6 +217,7 @@ sub initialize { 'holdings|h=i', 'copyid|c=s', 'prefix|p=s', + 'disable-pg-normalization', 'version|v', 'help', ); @@ -243,6 +244,12 @@ sub initialize { return $c; } +sub normalize_output { + my $str = shift; + $str =~ s!\\!\\\\!g unless $c->{'disable-pg-normalization'}; + return $str; +} + sub show_help { my ($msg) = @_; print "\nERROR - $msg\n" if $msg; @@ -270,6 +277,10 @@ HOLDINGS EXTRACTION ARGUMENTS used to extract holdings data from the input MARC file --holdings -h Specifies actual holdings tag --copyid -c Specifies subfield of holdings with unique copy identifier + --disable-pg-normalization By default, output is normalized so that a Postgres + copy or \\copy can import the data without choking on + backslashes; use this command-line option if + output is not meant to be consumed by psql. All three of these must be given together. HELP