From: Dobrica Pavlinusic Date: Sat, 6 Sep 2008 10:54:25 +0000 (+0000) Subject: a bit more work on marc_clone on some real records X-Git-Url: http://git.rot13.org/?p=webpac2;a=commitdiff_plain;h=399cb9e07d448efe141c6bb850eed0659b78a724 a bit more work on marc_clone on some real records git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@1111 07558da8-63fa-0310-ba24-9fe276d99e06 --- diff --git a/lib/WebPAC/Normalize/MARC.pm b/lib/WebPAC/Normalize/MARC.pm index 0cc675b..b1f0ba6 100644 --- a/lib/WebPAC/Normalize/MARC.pm +++ b/lib/WebPAC/Normalize/MARC.pm @@ -573,6 +573,12 @@ sub marc_original_order { foreach my $d (@$r) { + if ( ! ref($d) ) { + # scalar + warn "## marc_original_order($to,$from) skipped: ",dump( $d ); + next; + } + if (! defined($d->{subfields}) && ref($d->{subfields}) ne 'ARRAY') { warn "# marc_original_order($to,$from): field $from doesn't have subfields specification\n"; next; @@ -598,7 +604,7 @@ sub marc_original_order { } elsif ($offset == 0) { $v = $d->{$sf}; } else { - die "field $from subfield '$sf' need occurence $offset which doesn't exist", dump($d->{$sf}); + die "field $from subfield '$sf' need occurence $offset which doesn't exist in ", dump($d); } push @$m, ( $sf, $v ) if (defined($v)); } @@ -633,6 +639,7 @@ Clone marc records from input file, whole or just some fields/indicators =cut sub marc_clone { + warn "### marc_clone rec: ",dump( $rec ) if $debug > 2; foreach my $f ( keys %$rec ) { warn "## marc_clone $f\n" if $debug; marc_original_order( $f, $f ); diff --git a/t/3-normalize-marc.t b/t/3-normalize-marc.t index 721d78b..4cf85cb 100755 --- a/t/3-normalize-marc.t +++ b/t/3-normalize-marc.t @@ -145,10 +145,143 @@ sub test_marc_clone { } -test_marc_clone( { - '900' => [{ 'a' => '900a', 'b' => '900b', subfields => [ qw/a 0 b 0/ ] }], - '901' => [{ 'c' => '901c', subfields => [ qw/c 0/ ] }], -}, [ +my $rec = { + "000" => [2, 2], + "001" => ["ocm00734950 "], + "003" => ["OCoLC"], + "005" => ["19830824185243.0"], + "008" => ["731105s1962 nyua a 00000 eng "], + "010" => [ + { a => " 62015770 ", i1 => " ", i2 => " ", subfields => ["a", 0] }, + ], + "040" => [ + { + a => "DLC", + c => "BOS", + d => "TML", + i1 => " ", + i2 => " ", + subfields => ["a", 0, "c", 0, "d", 0, "d", 1, "d", 2], + }, + ], + "041" => [{ a => "engfre", i1 => 1, i2 => " ", subfields => ["a", 0] }], + "049" => [{ a => "TMLM", i1 => " ", i2 => " ", subfields => ["a", 0] }], + "050" => [ + { + a => "RC340", + b => ".P513 1806a", + i1 => 0, + i2 => " ", + subfields => ["a", 0, "b", 0], + }, + ], + "096" => [ + { a => "WM 11 P653t 1962", i1 => " ", i2 => " ", subfields => ["a", 0] }, + ], + 100 => [ + { + a => "Pinel, Philippe,", + d => "1745-1826.", + i1 => 1, + i2 => 0, + subfields => ["a", 0, "d", 0], + }, + ], + 245 => [ + { + 1 => 2, + a => "A treatise on insanity /", + c => "translated from the French by D. D. Davis, with an introd. by Paul F. Cranefield.", + subfields => [1, 0, "a", 0, "c", 0], + }, + ], + 260 => [ + { + a => "New York :", + b => "Published under the auspices of the Library of the New York Academy of Medicine by Hafner Pub. Co.,", + c => "1962.", + i1 => 0, + i2 => " ", + subfields => ["a", 0, "b", 0, "c", 0], + }, + ], + 300 => [ + { + a => "lv, 288 p. :", + b => "ill. ;", + c => "21 cm.", + i1 => " ", + i2 => " ", + subfields => ["a", 0, "b", 0, "c", 0], + }, + ], + 440 => [ + { + a => "History of medicine ;", + i1 => " ", + i2 => 0, + subfields => ["a", 0, "v", 0], + v => "no. 14", + }, + ], + 500 => [ + { + a => "\"Facsimile of the London 1806 edition.\"", + i1 => " ", + i2 => " ", + subfields => ["a", 0], + }, + { + a => "Translation of: Traite medico-philosophique sur l'alienation mentale.", + i1 => " ", + i2 => " ", + subfields => ["a", 0], + }, + ], + 590 => [ + { + a => "L21942,WM ,purc, 10.00,rtr,1-78", + i1 => " ", + i2 => " ", + subfields => ["a", 0], + }, + ], + 650 => [ + { " " => 2, a => "Psychiatry", subfields => [" ", 0, "a", 0] }, + { " " => 2, a => "Mental Disorders", subfields => [" ", 0, "a", 0] }, + ], + 852 => [ + { + 8 => ".1", + 9 => "`;11623`07/02/1991 08:09````````````````B^61^R04CZ4^^^^1^101^1^1000^^`1^11623^54969,29361^^`2^0^0^2^0^1^0^4`", + b => "LU GENCOL", + d => "TWO WEEKS", + h => "WM 11 P653t 1962", + i => 43, + i1 => " ", + i2 => " ", + o => "available", + p => "R04CZ4", + subfields => [8, 0, "b", 0, "h", 0, "t", 0, "p", 0, "i", 0, "d", 0, "o", 0, 9, 0], + t => 1, + }, + ], + 911 => [{ a => 61, i1 => " ", i2 => " ", subfields => ["a", 0] }], + 979 => [ + { + a => "USERS", + b => 19831011, + c => "TAPE", + d => "ARCH", + i1 => " ", + i2 => " ", + subfields => ["a", 0, "b", 0, "c", 0, "d", 0], + }, + ], + leader => ["01237cam 2200301Ii 4500"], +}; + +test_marc_clone( $rec, [ [900, " ", " ", "a", "900a", "b", "900b"], [901, " ", " ", "c", "901c"], ] );