--- trunk/lib/WebPAC/Normalize.pm 2006/12/06 23:44:36 785 +++ trunk/lib/WebPAC/Normalize.pm 2007/01/30 18:21:17 791 @@ -21,6 +21,7 @@ split_rec_on get set + count /; use warnings; @@ -41,11 +42,11 @@ =head1 VERSION -Version 0.24 +Version 0.26 =cut -our $VERSION = '0.24'; +our $VERSION = '0.26'; =head1 SYNOPSIS @@ -637,6 +638,10 @@ This will erase field C<200> or C<200^a> from current MARC record. + marc_remove('*'); + +Will remove all fields in current MARC record. + This is useful after calling C or on it's own (but, you should probably just remove that subfield definition if you are not using C). @@ -654,39 +659,47 @@ warn "### marc_remove before = ", dump( $marc ), $/ if ($debug > 2); - my $i = 0; - foreach ( 0 .. $#{ $marc } ) { - last unless (defined $marc->[$i]); - warn "#### working on ",dump( @{ $marc->[$i] }), $/ if ($debug > 3); - if ($marc->[$i]->[0] eq $f) { - if (! defined $sf) { - # remove whole field - splice @$marc, $i, 1; - warn "#### slice \@\$marc, $i, 1 = ",dump( @{ $marc }), $/ if ($debug > 3); - $i--; - } else { - foreach my $j ( 0 .. (( $#{ $marc->[$i] } - 3 ) / 2) ) { - my $o = ($j * 2) + 3; - if ($marc->[$i]->[$o] eq $sf) { - # remove subfield - splice @{$marc->[$i]}, $o, 2; - warn "#### slice \@{\$marc->[$i]}, $o, 2 = ", dump( @{ $marc }), $/ if ($debug > 3); - # is record now empty? - if ($#{ $marc->[$i] } == 2) { - splice @$marc, $i, 1; - warn "#### slice \@\$marc, $i, 1 = ", dump( @{ $marc }), $/ if ($debug > 3); - $i--; - }; + if ($f eq '*') { + + delete( $marc_record->[ $marc_record_offset ] ); + warn "## full marc_record = ", dump( @{ $marc_record }), $/ if ($debug > 1); + + } else { + + my $i = 0; + foreach ( 0 .. $#{ $marc } ) { + last unless (defined $marc->[$i]); + warn "#### working on ",dump( @{ $marc->[$i] }), $/ if ($debug > 3); + if ($marc->[$i]->[0] eq $f) { + if (! defined $sf) { + # remove whole field + splice @$marc, $i, 1; + warn "#### slice \@\$marc, $i, 1 = ",dump( @{ $marc }), $/ if ($debug > 3); + $i--; + } else { + foreach my $j ( 0 .. (( $#{ $marc->[$i] } - 3 ) / 2) ) { + my $o = ($j * 2) + 3; + if ($marc->[$i]->[$o] eq $sf) { + # remove subfield + splice @{$marc->[$i]}, $o, 2; + warn "#### slice \@{\$marc->[$i]}, $o, 2 = ", dump( @{ $marc }), $/ if ($debug > 3); + # is record now empty? + if ($#{ $marc->[$i] } == 2) { + splice @$marc, $i, 1; + warn "#### slice \@\$marc, $i, 1 = ", dump( @{ $marc }), $/ if ($debug > 3); + $i--; + }; + } } } } + $i++; } - $i++; - } - warn "### marc_remove($f", $sf ? ",$sf" : "", ") after = ", dump( $marc ), $/ if ($debug > 2); + warn "### marc_remove($f", $sf ? ",$sf" : "", ") after = ", dump( $marc ), $/ if ($debug > 2); - $marc_record->[ $marc_record_offset ] = $marc; + $marc_record->[ $marc_record_offset ] = $marc; + } warn "## full marc_record = ", dump( @{ $marc_record }), $/ if ($debug > 1); } @@ -1277,6 +1290,18 @@ return $v; } +=head2 count + + if ( count( @result ) == 1 ) { + # do something if only 1 result is there + } + +=cut + +sub count { + warn "## count ",dump(@_),$/; + return @_ . ''; +} # END 1;