Added some comments detailing how MARC fields are mapped to Koha data
authortonnesen <tonnesen>
Tue, 16 Apr 2002 19:49:15 +0000 (19:49 +0000)
committertonnesen <tonnesen>
Tue, 16 Apr 2002 19:49:15 +0000 (19:49 +0000)
acqui.simple/bulkmarcimport.pl

index ed06c9c..af18ed4 100755 (executable)
@@ -98,12 +98,14 @@ if ($file) {
     my $data=<F>;
     close F;
     $splitchar=chr(29);
+
+
+# Cycle through all of the records in the file
+
+
 RECORD:
     foreach $record (split(/$splitchar/, $data)) {
-       my $marctext="<table border=0 cellspacing=0>\n";
-       $marctext.="<tr><th colspan=3 bgcolor=black><font color=white>MARC RECORD</font></th></tr>\n";
        $leader=substr($record,0,24);
-       $marctext.="<tr><td>Leader:</td><td colspan=2>$leader</td></tr>\n";
        print "\n\n---------------------------------------------------------------------------\n";
        print "Leader: $leader\n";
        $record=substr($record,24);
@@ -115,8 +117,8 @@ RECORD:
        my %record;
        foreach $field (split(/$splitchar2/, $record)) {
            my %field;
-           ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
            unless ($directory) {
+               # Parse the MARC directory and store the cotents in the %tag hash
                $directory=$field;
                my $itemcounter=1;
                $counter=0;
@@ -134,7 +136,6 @@ RECORD:
            $tag=$tag{$tagcounter};
            $tagcounter++;
            $field{'tag'}=$tag;
-           $marctext.="<tr><td bgcolor=$color valign=top>$tagtext{$tag}</td><td bgcolor=$color valign=top>$tag</td>";
            printf "%4s %-40s ",$tag, $tagtext{$tag};
            $splitchar3=chr(31);
            my @subfields=split(/$splitchar3/, $field);
@@ -142,19 +143,14 @@ RECORD:
            $field{'indicator'}=$indicator;
            my $firstline=1;
            if ($#subfields==0) {
-               $marctext.="<td bgcolor=$color valign=top>$indicator</td></tr>";
                print "$indicator\n";
            } else {
                print "\n";
                my %subfields;
-               $marctext.="<td bgcolor=$color valign=top><table border=0 cellspacing=0>\n";
-               my $color2=$color;
                for ($i=1; $i<=$#subfields; $i++) {
-                   ($color2 eq $lc1) ? ($color2=$lc2) : ($color2=$lc1);
                    my $text=$subfields[$i];
                    my $subfieldcode=substr($text,0,1);
                    my $subfield=substr($text,1);
-                   $marctext.="<tr><td colour=$color2><table border=0 cellpadding=0 cellspacing=0><tr><td>$subfieldcode </td></tr></table></td><td colour=$color2>$subfield</td></tr>\n";
                    print "   $subfieldcode $subfield\n";
                    if ($subfields{$subfieldcode}) {
                        my $subfieldlist=$subfields{$subfieldcode};
@@ -169,7 +165,6 @@ RECORD:
                        $subfields{$subfieldcode}=$subfield;
                    }
                }
-               $marctext.="</table></td></tr>\n";
                $field{'subfields'}=\%subfields;
            }
            if ($record{$tag}) {
@@ -186,13 +181,12 @@ RECORD:
            }
            push (@record, \%field);
        }
-       $marctext.="</table>\n";
        $rec=\@record;
        $counter++;
        my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $additionalauthors, $illustrator, $copyrightdate, $barcode, $itemtype, $seriestitle, @barcodes);
        my $marc=$record;
        foreach $field (sort {$a->{'tag'} cmp $b->{'tag'}} @$rec) {
-           #print $field->{'tag'}." ".$field->{'subfields'}->{'a'}."\n";
+           # LCCN is stored in field 010 a
            if ($field->{'tag'} eq '010') {
                $lccn=$field->{'subfields'}->{'a'};
                $lccn=~s/^\s*//;
@@ -200,34 +194,42 @@ RECORD:
                $lccn=~s/^\s*//;
                ($lccn) = (split(/\s+/, $lccn))[0];
            }
+           # LCCN is stored in field 015 a
            if ($field->{'tag'} eq '015') {
                $lccn=$field->{'subfields'}->{'a'};
                $lccn=~s/^\s*//;
                $lccn=~s/^C//;
                ($lccn) = (split(/\s+/, $lccn))[0];
            }
+           # ISBN is stored in field 020 a
            if ($field->{'tag'} eq '020') {
                $isbn=$field->{'subfields'}->{'a'};
                $isbn=~s/^\s*//;
                ($isbn) = (split(/\s+/, $isbn))[0];
            }
+           # ISSN is stored in field 022 a
            if ($field->{'tag'} eq '022') {
                $issn=$field->{'subfields'}->{'a'};
                $issn=~s/^\s*//;
                ($issn) = (split(/\s+/, $issn))[0];
            }
+           # Dewey number stored in field 082 a
+           # If there is more than one dewey number (more than one 'a'
+           # subfield) I just take the first one
            if ($field->{'tag'} eq '082') {
                $dewey=$field->{'subfields'}->{'a'};
-               print "DEWEY: $dewey\n";
                $dewey=~s/\///g;
                if (@$dewey) {
                    $dewey=$$dewey[0];
                }
-               #$dewey=~s/\///g;
            }
+           # Author is stored in field 100 a
            if ($field->{'tag'} eq '100') {
                $author=$field->{'subfields'}->{'a'};
            }
+           # Title is stored in field 245 a
+           # Subtitle in field 245 b
+           # Illustrator in field 245 c
            if ($field->{'tag'} eq '245') {
                $title=$field->{'subfields'}->{'a'};
                $title=~s/ \/$//;
@@ -238,6 +240,11 @@ RECORD:
                    $illustrator=$1;
                }
            }
+           # Publisher Info in field 260
+           #   a = place
+           #   b = publisher
+           #   c = publication date
+           #     (also store as copyright date if date starts with a 'c' as in c1995)
            if ($field->{'tag'} eq '260') {
                $place=$field->{'subfields'}->{'a'};
                if (@$place) {
@@ -262,6 +269,9 @@ RECORD:
                    $publicationyear=$1;
                }
            }
+           # Physical Dimensions in field 300
+           #   a = pages
+           #   c = size
            if ($field->{'tag'} eq '300') {
                $pages=$field->{'subfields'}->{'a'};
                $pages=~s/ \;$//;
@@ -269,12 +279,15 @@ RECORD:
                $pages=~s/\s*:$//g;
                $size=~s/\s*:$//g;
            }
+           # Vol/No in field 362 a
            if ($field->{'tag'} eq '362') {
                if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
                    $volume=$1;
                    $number=$2;
                }
            }
+           # Series Title in field 440 a
+           # Vol/No in field 440 v
            if ($field->{'tag'} eq '440') {
                $seriestitle=$field->{'subfields'}->{'a'};
                if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
@@ -282,10 +295,16 @@ RECORD:
                    $number=$2;
                }
            }
+           # BARCODES!!!
+           # 852 p stores barcodes
+           # 852 h stores dewey field
+           # 852 9 stores replacement price
+           #   I check for an itemtype identifier in 852h as well... pb or pbk means PBK
+           #   also if $dewey is > 0, then I assign JNF, otherwise JF.
+           #   Note that my libraries are school libraries, so I assume Junior.
            if ($field->{'tag'} eq '852') {
                $barcode=$field->{'subfields'}->{'p'};
                push (@barcodes, $barcode);
-               print "BARCODE: $barcode\n";
                my $q_barcode=$dbh->quote($barcode);
                my $deweyfield=$field->{'subfields'}->{'h'};
                $deweyfield=~/^([\d\.]*)/;
@@ -299,8 +318,9 @@ RECORD:
                }
 
                $replacementprice=$field->{'subfields'}->{'9'};
-               #print "BC: $barcode, $title, $author\n";
            }
+           # 700 a stores additional authors / illustrator info
+           # 700 c will contain 'ill' if it's an illustrator
            if ($field->{'tag'} eq '700') {
                my $name=$field->{'subfields'}->{'a'};
                if ($field->{'subfields'}->{'c'}=~/ill/) {
@@ -309,9 +329,16 @@ RECORD:
                    $additionalauthors.="$name\n";
                }
            }
+           # I concatenate all 5XX a entries as notes
            if ($field->{'tag'} =~/^5/) {
                $note.="$field->{'subfields'}->{'a'}\n";
            }
+           # 6XX entries are subject entries
+           #   Not sure why I'm skipping 691 tags
+           #   691 a contains the subject.
+           # I take subfield a, and append entries from subfield x (general
+           # subdivision) y (Chronological subdivision) and z (geographic
+           # subdivision)
            if ($field->{'tag'} =~/6\d\d/) {
                (next) if ($field->{'tag'} eq '691');
                my $subject=$field->{'subfields'}->{'a'};