X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=Equinox-Migration%2Flib%2FEquinox%2FMigration%2FMapDrivenMARCXMLProc.pm;h=2c789c9d24aa2e854c89dd38c5db4a33e844d73f;hp=bf9144d83e2230f0244d6f760109f77990dfe852;hb=df7e60bd03f18a58a67c8d46f15d91fa98a7e5de;hpb=a09dbe656fda90a77c36fd3093f99e7f26f4f480 diff --git a/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm b/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm index bf9144d..2c789c9 100644 --- a/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm +++ b/Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm @@ -106,7 +106,7 @@ sub parse_record { # get the next record and wipe current parsed record return 0 unless defined $self->{data}{recs}[ $self->{data}{rptr} ]; my $record = $self->{data}{recs}[ $self->{data}{rptr} ]; - $self->{data}{crec} = { bib => undef, multi => undef }; + $self->{data}{crec} = { egid => undef, bib => undef, tags => undef }; my @fields = $record->children; for my $f (@fields) @@ -116,7 +116,7 @@ sub parse_record { $record->purge; $self->{data}{rptr}++; - return $self->format_record; + return $self->{data}{crec}; } =head2 process_field @@ -127,18 +127,19 @@ sub process_field { my ($self, $field) = @_; my $map = $self->{map}; my $tag = $field->{'att'}->{'tag'}; - my $parsed = $self->{data}{crec}; + my $crec = $self->{data}{crec}; # datafields if (defined $tag) { if ($tag == 903) { my $sub = $field->first_child('subfield'); - $parsed->{egid} = $sub->text;; + $crec->{egid} = $sub->text;; } elsif ($map->has($tag)) { - push @{$parsed->{tags}}, { tag => $tag }; + push @{$crec->{tags}}, { tag => $tag, uni => undef, multi => undef }; my @subs = $field->children('subfield'); for my $sub (@subs) { $self->process_subs($tag, $sub) } + # check map to ensure all declared subs are in } } } @@ -158,23 +159,26 @@ sub process_subs { my $s = $self->{data}{stag}; return unless (defined $s->{$tag}); + # set a value, total-seen count and records-seen-in count $u->{$tag}{$code}{value} = $sub->text unless defined $u->{$tag}{$code}; $u->{$tag}{$code}{count}++; + $u->{$tag}{$code}{rcnt}++ unless ($u->{$tag}{$code}{last} == $self->{data}{rptr}); + $u->{$tag}{$code}{last} = $self->{data}{rptr}; return; } - my $data = $self->{data}{crec}{tags}[-1]; + my $dataf = $self->{data}{crec}{tags}[-1]; my $field = $map->field($tag, $code); # handle modifiers if (defined $map->mods($field)) { if ($map->mods($field) eq 'multi') { my $name = $tag . $code; - push @{$data->{multi}{$name}}, $sub->text; + push @{$dataf->{multi}{$name}}, $sub->text; } } - $data->{uni}{$code} = $sub->text; + $dataf->{uni}{$code} = $sub->text; } =head1 PARSED RECORDS