Skip to content

Instantly share code, notes, and snippets.

@fredericd
Created December 28, 2015 16:17
Show Gist options
  • Save fredericd/04e3e954135c5f7d71bd to your computer and use it in GitHub Desktop.
Save fredericd/04e3e954135c5f7d71bd to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use Modern::Perl;
use YAML;
use MARC::Moose::Reader::File::Iso2709;
use MARC::Moose::Writer;
sub clean200 {
my ($source, $target) = @_;
my $reader = MARC::Moose::Reader::File::Iso2709->new( file => $source );
my $writer = MARC::Moose::Writer->new(
formater => MARC::Moose::Formater::Iso2709->new(),
fh => IO::File->new($target, '>:encoding(utf8)')
);
while ( my $record = $reader->read() ) {
my @fields = $record->field('200');
my %vpl; # value per lang
for my $field ( @fields ) {
my $lang = $field->subfield('8');
next unless $lang;
$vpl{$lang} = $field->subfield('a');
}
if ( $vpl{eng} && $vpl{gre} && $vpl{eng} eq $vpl{gre} ) {
# Remove 200 when $8 = gre
@fields = grep {
my $lang = $_->subfield('8');
!($lang && $lang eq 'gre');
} @fields;
$record->delete('200');
$record->append(@fields);
}
$record->fields( [ grep {
my $keep = 1;
if ( $_->tag eq '400' ) {
my $value = $_->subfield('a');
$keep = 0
if $value && ( $value eq $vpl{eng} || $value eq $vpl{gre} );
}
$keep;
} @{$record->fields} ] );
$writer->write($record);
}
}
clean200('biblio.mrc', 'biblio-clean.mrc');
@fredericd
Copy link
Author

Clean a file biblio.mrc. Result is written in biblio-clean.mrc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment