Marc split.pl
From DLXS Documentation
Main Page > Mounting Collections: Class-specific Steps > Mounting a Bib Class Collection > Preparing BibClass Data > marc_split.pl
#!/l/local/bin/perl #******************************************************************* # # File: marc_split.pl # Desc: Splits a file of MARC records into individual # files named by their NOTIS-ID. # #******************************************************************* # $Id: marc_split.pl,v 1.1 2004/10/06 19:23:55 pagliere Exp $ $count = "0"; $spin_count = 0; @spinner = ("-", "\\", "|", "/" ); #******************************************************************* # # Function: PrintSpinner # Desc: Dumb feedback to stdout for user # Args: n/a # Returns: n/a # #******************************************************************* sub PrintSpinner { print "$spinner[$spin_count]\x08"; $spin_count++; $spin_count %= 5; } #******************************************************************* # # Function: main # Desc: (see file descrition) # Args: input: <umrrecs.marc> file # output: <moa_notis.txt> file # <moa_list.txt> file # Returns: n/a # #******************************************************************* main: { #been running this on each separate files $/ = "\035"; $field = "\036"; $subfield = "\037"; if ( $#ARGV >= 0 ) { $inputfile = $ARGV[0]; } else { print "Syntax: marc_split.pl <input-filename>\n"; return; } open (MARC, $inputfile) or die "ERROR: Unable to open input file --"; while (<MARC>) { chomp; my(%record); $data = $_; $record{'leader'} = substr($_, 0, 24); $record{'logical_record_length'} = substr($record{'leader'}, 0, 5); $record{'data_offset'} = substr($record{'leader'}, 12, 5); $record{'all_data'} = substr($_, $record{'data_offset'}); substr($_, 0, 24) = ''; while ($_ =~ s,^(\d{12}),,) { my($entry) = $1; my($tag) = substr($entry, 0, 3); if ($tag =~ "001") { my($field_length) = substr($entry, 3, 4); my($fl) = $field_length; $fl =~ s,^0+,,; my($starting_char_offset) = substr($entry, 7, 5); my($scp) = $starting_char_offset; $scp =~ s,^0+,,; $record{"$tag"}{"field_length"} = $field_length; $record{"$tag"}{"starting_char_offset"} = $starting_char_offset; $record{"$tag"}{"data"} = substr($record{'all_data'}, $scp, $fl); $record{"$tag"}{"data"} =~ s,$field,,; $record{"$tag"}{"data"} =~ s,$subfield(\w),,g; } &PrintSpinner; } # end--while ($_ =~ s,^(\d{12}),,) $notisid = $record{'001'}{'data'}; $notisid =~ s,^UL,,; ($notisid) = split /\s/, $notisid, 0; # Output single MARC record $pathname = "./marc/" . $notisid . ".marc"; open (NOTIS, ">$pathname") or die "ERROR: Unable to open input file --"; print( NOTIS $data ); close(NOTIS); $count++; } # end-- while (<>) print "\n Total records processed: $count \n"; close(MARC); } # end main