A recent posting on the OCLC-CAT discussion list ("Help needed de-duping,
editing and exporting a raw MARC file with Connexion") mentions difficulty
the poster is experiencing with using records with too many 949 fields for
MarcEdit to load. This led me to attempt to create a test MARC file to see
if I could replicate the problem. In the process, I believe I may have found
a problem with the way MARC::Record updates the leader for the record
length. Starting with a file containing a minimal raw MARC record (leader,
001 of '1', 008, and 245 of '.'), I ran the file through the loop:

while (my $record = $batch->next()) {
        for my $fieldno (0..4810) { #where 4810 was the approximate number
of fields needed to push the record length past 99999
                my $new_field = MARC::Field->new('949', '', '', a =>
"$fieldno");
                $record->append_fields($new_field);
        } #for fields

print OUT $record->as_usmarc(); #where OUT is an export file previously
opened

} # while

################################

The output file shows the start of the leader as "100032pam 22577931."
MARC::Record::set_leader_lengths has a line "substr($self->{_leader},0,5)  =
sprintf("%05d",$reclen);". Is this supposed to limit the $reclen to 5
characters, or does sprintf "%05d" simply append the necessary 0s to make
sure the length is at least 5 digits? Since a record length over 99999 is
impossible, it might be good to have MARC::Record complain about exceeding
the record size limit if the $reclen > 99999, and to not exceed 5 characters
when setting the record length.

Please correct me if I am wrong. Thank you for your assistance,

Bryan Baldus
[EMAIL PROTECTED]
[EMAIL PROTECTED]
http://home.inwave.com/eija
 

Reply via email to