From 0632b47df4ff1ec07ca3813010c3c39a727863fd Mon Sep 17 00:00:00 2001 From: miker Date: Fri, 25 Jul 2008 19:04:08 +0000 Subject: [PATCH] a tool for adding IDs to MARCXML dumped directly from biblio.record_entry git-svn-id: svn://svn.open-ils.org/ILS/trunk@10135 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/extras/import/marc_add_ids | 67 +++++++++++++++++++ .../src/extras/import/parallel_pg_loader.pl | 3 + Open-ILS/src/extras/import/pg_loader.pl | 3 + 3 files changed, 73 insertions(+) create mode 100755 Open-ILS/src/extras/import/marc_add_ids diff --git a/Open-ILS/src/extras/import/marc_add_ids b/Open-ILS/src/extras/import/marc_add_ids new file mode 100755 index 0000000000..85d718fa0e --- /dev/null +++ b/Open-ILS/src/extras/import/marc_add_ids @@ -0,0 +1,67 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Getopt::Long; +use MARC::Record; +use MARC::Charset; +use MARC::File::XML; +use Error qw/:try/; + +MARC::Charset->assume_unicode(1); +MARC::Charset->ignore_errors(1); + +binmode(STDIN, ':utf8'); +binmode(STDOUT, ':utf8'); + +my ($delim, @fields) = (' \| '); +GetOptions( + 'delimiter=s' => \$delim, + 'field=s' => \@fields, +); + +my %partmap; +my $partcount = 0; +for (@fields) { + $partmap{$_} = $partcount; + $partcount++; +} + +while (<>) { + chomp; + my @values = split $delim; + + my %partlist; + for my $part (keys %partmap) { + ($partlist{tcn_value} = $values[ $partmap{tcn_value}]) =~ s/^\s*//o if ($part eq 'tcn_value'); + ($partlist{tcn_source} = $values[ $partmap{tcn_source}]) =~ s/^\s*//o if ($part eq 'tcn_source'); + ($partlist{id} = $values[ $partmap{id}]) =~ s/^\s*//o if ($part eq 'id'); + $partlist{marc} = $values[ $partmap{marc}] if ($part eq 'marc'); + + $partlist{tcn_value} =~ s/\s*$//o if ($part eq 'tcn_value'); + $partlist{tcn_source} =~ s/\s*$//o if ($part eq 'tcn_source'); + $partlist{id} =~ s/\s*$//o if ($part eq 'id'); + } + + next unless ($partlist{marc}); + + try { + my $r = MARC::Record->new_from_xml($partlist{marc}); + + my %sfmap; + $sfmap{a} = $partlist{tcn_value} if ($partlist{tcn_value}); + $sfmap{b} = $partlist{tcn_source} if ($partlist{tcn_source}); + $sfmap{c} = $partlist{id} if ($partlist{id}); + + my $f = MARC::Field->new(901 => ' ' => ' ' => %sfmap); + $r->delete_field($_) for ($r->field('901')); + $r->append_fields( $f ); + + print $r->as_xml_record; + } otherwise { + warn "failed on record $., $partlist{marc}\n"; + }; +} + + diff --git a/Open-ILS/src/extras/import/parallel_pg_loader.pl b/Open-ILS/src/extras/import/parallel_pg_loader.pl index a28740aba0..f9a5a1bd0e 100755 --- a/Open-ILS/src/extras/import/parallel_pg_loader.pl +++ b/Open-ILS/src/extras/import/parallel_pg_loader.pl @@ -80,6 +80,9 @@ while ( my $rec = <> ) { fields => \@cols, }; + #XXX it burnnnsssessss + $fieldcache{$hint}{table} =~ s/\.full_rec/.real_full_rec/o if ($hint eq 'mfr'); + my $fields = join(',', @{ $fieldcache{$hint}{fields} }); $main_out->print( "DELETE FROM $fieldcache{$hint}{table};\n" ) if (grep {$_ eq $hint } @wipe); $main_out->print( "COPY $fieldcache{$hint}{table} ($fields) FROM '$pwd/$output.$hint.sql';\n" ); diff --git a/Open-ILS/src/extras/import/pg_loader.pl b/Open-ILS/src/extras/import/pg_loader.pl index 679f44edd6..bbd08d6250 100755 --- a/Open-ILS/src/extras/import/pg_loader.pl +++ b/Open-ILS/src/extras/import/pg_loader.pl @@ -62,6 +62,9 @@ while ( my $rec = <> ) { pkey => $class->Identity, fields => \@cols, }; + + #XXX it burnnnsssessss + $fieldcache{$hint}{table} =~ s/\.full_rec/.real_full_rec/o if ($hint eq 'mfr'); } push @{ $lineset{$hint} }, [map { $row->$_ } @{ $fieldcache{$hint}{fields} }]; -- 2.43.2