X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=extract_holdings;h=d39aac9bddb1d0e033e65d33a8fdbe302d7e82dc;hp=01f6a4572fda7671049e206baffc7a21cb687d7e;hb=5a0ffda818989fddf5c3315d00c87fdf348cae92;hpb=65892ebd1ab911f95c789cac01eb8d20ad2ad2c1 diff --git a/extract_holdings b/extract_holdings index 01f6a45..d39aac9 100755 --- a/extract_holdings +++ b/extract_holdings @@ -33,6 +33,7 @@ sub extract_holdings { mapfile => $c->{map}, verbose => 1, ); + print "Writing holdings to output file(s)...\n"; # open main holdings file open HOLDINGS, '>', ($c->{prefix} . "-HOLDINGS.pg"); @@ -79,20 +80,33 @@ sub extract_holdings { # now get everything else in the mapping for my $othertag ( sort keys %{$rec->{tmap}} ) { next if $othertag eq $c->{holdings}; # ignoring the holdings, o'course - my $idx = $rec->{tmap}{$othertag}[0]; # get index into tags struct - unless (defined $idx) { + my $test_idx = $rec->{tmap}{$othertag}[0]; # get index into tags struct + unless (defined $test_idx) { push @out, ''; next; } - for my $sub ( sort keys %{$rec->{tags}[$idx]{uni}} ) { - push @out, $rec->{tags}[$idx]{uni}{$sub}; - print HOLDINGS "l_", $m->name($rec->{tags}[$idx]{tag}, $sub), ", " - unless $j; + # handle only first other tag unless it is known to be multi + my $limit = 0; + if (exists($multis->{$othertag})) { + $limit = $#{ $rec->{tmap}{$othertag} }; } - for my $sub ( sort keys %{$multis->{$othertag}} ) { - for my $value ( @{$rec->{tags}[$idx]{multi}{$sub}} ) { - my $fh = $MULTIFILE{"$othertag$sub"}; - print $fh join("\t", $rec->{egid}, $j, $value), "\n"; + foreach my $idx (0..$limit) { + for my $sub ( sort keys %{$rec->{tags}[$idx]{uni}} ) { + if ($m->first_only($rec->{tags}[$idx]{tag}, $sub)) { + push @out, ($k == 1) ? $rec->{tags}[$idx]{uni}{$sub} : ''; + } else { + push @out, $rec->{tags}[$idx]{uni}{$sub}; + } + print HOLDINGS "l_", $m->name($rec->{tags}[$idx]{tag}, $sub), ", " + unless $j; + } + next unless exists($multis->{$othertag}); + for my $sub ( sort keys %{$multis->{$othertag}} ) { + next if $m->first_only($rec->{tags}[$idx]{tag}, $sub) and ($k > 1); + for my $value ( @{$rec->{tags}[$idx]{multi}{$sub}} ) { + my $fh = $MULTIFILE{"$othertag$sub"}; + print $fh join("\t", $rec->{egid}, $j, $value), "\n"; + } } } }