[Koha] Converting MARC records from Sagebrush Athena

Tim McMahon - West Liberty Public Library tmcmahon at wlpl.org
Thu May 5 04:34:10 NZST 2005


I'm looking for comments on my work so far.  Here is the perl script I
wrote to move things to different fields for Koha.  Let me know if you 
see anything that should be changed or could be done a better way.  I'm 
still learning perl, so this could look pretty bad.

First I set up a hash for converting Athena formats to Koha item types. 
  After I read a record, I pick the data I want from the 852 fields.

	852_6 is format
	852_p is barcode
	852_9 is cost
	852_8 is accession date
	852_k is call number prefix
	852_k is call number main
	852_i is call number cutter
	852_m is call number suffix

852_9 is changed to pull any extra characters out of the cost.

Athena allows longer strings for their formats.  852_9 is changed to 
shorter strings using the hash made at the start of the script.

Build a whole call number from the pieces in 852 by putting $k, $h, $i 
and $m together with spaces between and then stripping extra spaces out 
of it.

Put 952 together with our new 852_9, our new call, a code for the home 
branch and holding branch and the barcode.



#!/usr/bin/perl

# use strict;
# use warnings;

## Crate our MARC::Batch object.
use MARC::Batch;
my $infile = $ARGV[0];
my $outfile = $ARGV[1];

my $batch = MARC::Batch->new('USMARC',$infile);

## open a file handle to write to.

open(OUT,">$outfile") or die $!;

my %format = (
	'binder' => BIND,
	'book' => BOOK,
	'book kit' => KIT,
	'books on CD' => BKCD,
	'books on tape' => BKTP,
	'cbook' => BOOK,
	'CD' => CD,
	'CD-ROM' => CD,
	'DVD' => DVD,
	'ebook' => BOOK,
	'equipment' => EQU,
	'file folder' => FILE,
	'frame' => FRAM,
	'hbook' => BOOK,
	'magazine' => MAG,
	'map' => MAP,
	'sbook' => BOOK,
	'tboot' => BOOK,
	'vbook' => BOOK,
	'video' => VID
);

## read each record. modify, then print.
while ( my $record = $batch->next() ) {

## get info from 852 field.
my @fields = $record->field('852');
foreach my $field (@fields) {
$field852_6=$field->subfield('6');
$field852_p=$field->subfield('p');
$field852_9=$field->subfield('9');
$field852_8=$field->subfield('8');
$field852_k=$field->subfield('k');
$field852_h=$field->subfield('h');
$field852_i=$field->subfield('i');
$field852_m=$field->subfield('m');
$field852_9 =~ s/[^0-9.]//ig;

## change the format in 852 6
  my $new_field=$format{$field852_6};
  $field->update( 6 => $new_field );

## Make a new call number for 952 a
$call=$field852_k . ' ' . $field852_h . ' ' . $field852_i . ' ' . 
$field852_m;
while ($call=~s/  / /ig) {}
$call=~s/^ //;
$call=~s/ $//;

## add 952 field from 852 tags
$record->append_fields(
MARC::Field->new('952','','',8=>$field852_8,
	9=>$field852_9,
	a=>$call,
	b=>'WLPL',
	d=>'WLPL',
	p=>$field852_p));

print OUT $record->as_usmarc();
}}
close(OUT);

_______________________________________________
Koha mailing list
Koha at lists.katipo.co.nz
http://lists.katipo.co.nz/mailman/listinfo/koha




More information about the Koha mailing list