koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.10,1.6.2.11


From: Alan Millar
Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.10,1.6.2.11
Date: Wed, 05 Jun 2002 10:19:06 -0700

Update of /cvsroot/koha/koha/acqui.simple
In directory usw-pr-cvs1:/tmp/cvs-serv24847

Modified Files:
      Tag: rel-1-2
        marcimport.pl 
Log Message:
All mapping of MARC tags to Koha db fields isolated to one subroutine

Index: marcimport.pl
===================================================================
RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v
retrieving revision 1.6.2.10
retrieving revision 1.6.2.11
diff -C2 -r1.6.2.10 -r1.6.2.11
*** marcimport.pl       3 Jun 2002 21:02:08 -0000       1.6.2.10
--- marcimport.pl       5 Jun 2002 17:19:04 -0000       1.6.2.11
***************
*** 84,87 ****
--- 84,114 ----
  );
  
+ # tag, subfield, field name, repeats, stripchars
+ my @tagmaplist=(
+       ['010', 'a', 'lccn',                    0       ],
+       ['015', 'a', 'lccn',                    0       ],
+       ['020', 'a', 'isbn',                    0       ],
+       ['022', 'a', 'issn',                    0       ],
+       ['082', 'a', 'dewey',                   0       ],
+       ['100', 'a', 'author',                  0       ],
+       ['245', 'a', 'title',                   0       ],
+       ['245', 'b', 'subtitle',                0       ],
+       ['260', 'a', 'place',                   0, ':'  ],
+       ['260', 'b', 'publisher',               0, ':'  ],
+       ['260', 'c', 'year' ,                   0       ],
+       ['300', 'a', 'pages',                   0, ':;' ],
+       ['300', 'c', 'size',                    0       ],
+       ['362', 'a', 'volume-number',           0       ],
+       ['440', 'a', 'seriestitle',             0       ],
+       ['440', 'v', 'series-volume-number',    0       ],
+       ['700', 'a', 'addtional-author-illus',  1       ],
+       ['5xx', 'a', 'notes',                   1       ],
+       ['65x', 'a', 'subject',                 1, '.'  ],
+ );
+ my (
+     $tagmap,  # hash ref of mappings
+ );
+ 
+ #-------------
  #-------------
  # Initialize
***************
*** 92,95 ****
--- 119,124 ----
  my $dbh=C4Connect;
  
+ $tagmap=BuildTagMap(@tagmaplist);
+ 
  #-------------
  # Display output
***************
*** 259,401 ****
            my $marctext=$marctext{$record};
            my $marc=$marc{$record};
!           foreach $field (@$record) {
!               if ($field->{'tag'} eq '001') {
!                   $controlnumber=$field->{'indicator'};
!               }
!               if ($field->{'tag'} eq '010') {
!                   $lccn=$field->{'subfields'}->{'a'};
!                   $lccn=~s/^\s*//;
!                   ($lccn) = (split(/\s+/, $lccn))[0];
!               }
!               if ($field->{'tag'} eq '015') {
!                   $lccn=$field->{'subfields'}->{'a'};
!                   $lccn=~s/^\s*//;
!                   $lccn=~s/^C//;
!                   ($lccn) = (split(/\s+/, $lccn))[0];
!               }
!               if ($field->{'tag'} eq '020') {
!                   $isbn=$field->{'subfields'}->{'a'};
!                   ($isbn=~/^ARRAY/) && ($isbn=$$isbn[0]);
!                   $isbn=~s/[^\d]*//g;
!               }
!               if ($field->{'tag'} eq '022') {
!                   $issn=$field->{'subfields'}->{'a'};
!                   $issn=~s/^\s*//;
!                   ($issn) = (split(/\s+/, $issn))[0];
!               }
!               if ($field->{'tag'} eq '082') {
!                   $dewey=$field->{'subfields'}->{'a'};
!                   $dewey=~s/\///g;
!                   if (@$dewey) {
!                       $dewey=$$dewey[0];
!                   }
!                   #$dewey=~s/\///g;
!               }
!               if ($field->{'tag'} eq '100') {
!                   $author=$field->{'subfields'}->{'a'};
!               }
!               if ($field->{'tag'} eq '245') {
!                   $title=$field->{'subfields'}->{'a'};
!                   $title=~s/ \/$//;
!                   $subtitle=$field->{'subfields'}->{'b'};
!                   $subtitle=~s/ \/$//;
!               }
!               if ($field->{'tag'} eq '260') {
!                   $place=$field->{'subfields'}->{'a'};
!                   if (@$place) {
!                       $place=$$place[0];
!                   }
!                   $place=~s/\s*:$//g;
!                   $publisher=$field->{'subfields'}->{'b'};
!                   if (@$publisher) {
!                       $publisher=$$publisher[0];
!                   }
!                   $publisher=~s/\s*:$//g;
!                   $publicationyear=$field->{'subfields'}->{'c'};
!                   if ($publicationyear=~/c(\d\d\d\d)/) {
!                       $copyrightdate=$1;
!                   }
!                   if ($publicationyear=~/[^c](\d\d\d\d)/) {
!                       $publicationyear=$1;
!                   } elsif ($copyrightdate) {
!                       $publicationyear=$copyrightdate;
!                   } else {
!                       $publicationyear=~/(\d\d\d\d)/;
!                       $publicationyear=$1;
!                   }
!               }
!               if ($field->{'tag'} eq '300') {
!                   $pages=$field->{'subfields'}->{'a'};
!                   $pages=~s/ \;$//;
!                   $size=$field->{'subfields'}->{'c'};
!                   $pages=~s/\s*:$//g;
!                   $size=~s/\s*:$//g;
!               }
!               if ($field->{'tag'} eq '362') {
!                   if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
!                       $volume=$1;
!                       $number=$2;
!                   }
!               }
!               if ($field->{'tag'} eq '440') {
!                   $seriestitle=$field->{'subfields'}->{'a'};
!                   if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
!                       $volume=$1;
!                       $number=$2;
!                   }
!               }
!               if ($field->{'tag'} eq '700') {
!                   my $name=$field->{'subfields'}->{'a'};
!                   if ($field->{'subfields'}->{'c'}=~/ill/) {
!                       $additionalauthors.="$name\n";
!                   } else {
!                       $illustrator=$name;
!                   }
!               }
!               if ($field->{'tag'} =~/^5/) {
!                   $notes.="$field->{'subfields'}->{'a'}\n";
!               }
!               if ($field->{'tag'} =~/65\d/) {
!                   my $subject=$field->{'subfields'}->{'a'};
!                   $subject=~s/\.$//;
!                   if ($gensubdivision=$field->{'subfields'}->{'x'}) {
!                       my @address@hidden;
!                       if ($#sub>=0) {
!                           foreach $s (@sub) {
!                               $s=~s/\.$//;
!                               $subject.=" -- $s";
!                           }
!                       } else {
!                           $gensubdivision=~s/\.$//;
!                           $subject.=" -- $gensubdivision";
!                       }
!                   }
!                   if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
!                       my @address@hidden;
!                       if ($#sub>=0) {
!                           foreach $s (@sub) {
!                               $s=~s/\.$//;
!                               $subject.=" -- $s";
!                           }
!                       } else {
!                           $chronsubdivision=~s/\.$//;
!                           $subject.=" -- $chronsubdivision";
!                       }
!                   }
!                   if ($geosubdivision=$field->{'subfields'}->{'z'}) {
!                       my @address@hidden;
!                       if ($#sub>=0) {
!                           foreach $s (@sub) {
!                               $s=~s/\.$//;
!                               $subject.=" -- $s";
!                           }
!                       } else {
!                           $geosubdivision=~s/\.$//;
!                           $subject.=" -- $geosubdivision";
!                       }
!                   }
!                   push @subjects, $subject;
!               }
!           } # foreach field
            $titleinput=$input->textfield(-name=>'title', -default=>$title, 
-size=>40);
            $marcinput=$input->hidden(-name=>'marc', -default=>$marc);
--- 288,316 ----
            my $marctext=$marctext{$record};
            my $marc=$marc{$record};
! 
!           $bib=extractmarcfields($record);
! 
!               $controlnumber          =$bib->{controlnumber};
!               $lccn                   =$bib->{lccn};
!               $isbn                   =$bib->{isbn};
!               $issn                   =$bib->{issn};
!               $author                 =$bib->{author};
!               $title                  =$bib->{title};
!               $subtitle               =$bib->{subtitle};
!               $dewey                  =$bib->{dewey};
!               $place                  =$bib->{place};
!               $publisher              =$bib->{publisher};
!               $publicationyear        =$bib->{publicationyear};
!               $copyrightdate          =$bib->{copyrightdate};
!               $pages                  =$bib->{pages};
!               $size                   =$bib->{size};
!               $volume                 =$bib->{volume};
!               $number                 =$bib->{number};
!               $seriestitle            =$bib->{seriestitle};
!               $additionalauthors      =$bib->{additionalauthors};
!               $illustrator            =$bib->{illustrator};
!               $notes                  =$bib->{notes};
!               $subject                =$bib->{subject};
! 
            $titleinput=$input->textfield(-name=>'title', -default=>$title, 
-size=>40);
            $marcinput=$input->hidden(-name=>'marc', -default=>$marc);
***************
*** 656,660 ****
        
  
!       $bib=simplemarcfields($record);
  
        $sth=$dbh->prepare("select * 
--- 571,575 ----
        
  
!       $bib=extractmarcfields($record);
  
        $sth=$dbh->prepare("select * 
***************
*** 691,695 ****
  
  #------------------
! sub simplemarcfields {
      # input
      my (
--- 606,611 ----
  
  #------------------
! sub extractmarcfields {
!     use strict;
      # input
      my (
***************
*** 704,707 ****
--- 620,629 ----
        $field, $value,
      );
+     my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, 
+       $publisher, $publicationyear, $volume, $number, @subjects, $subject,
+       $size, $pages, $controlnumber, $subtitle,
+       $notes, $additionalauthors, $illustrator, $copyrightdate, 
+       $s, $subdivision, $subjectsubfield,
+       $seriestitle);
      foreach $field (@$record) {
            if ($field->{'tag'} eq '001') {
***************
*** 721,725 ****
            if ($field->{'tag'} eq '020') {
                $bib->{isbn}=$field->{'subfields'}->{'a'};
!               ($bib->{isbn}=~/ARRAY/) && ($bib->{isbn}=$$bib->{isbn}[0]);
                $bib->{isbn}=~s/[^\d]*//g;
            }
--- 643,647 ----
            if ($field->{'tag'} eq '020') {
                $bib->{isbn}=$field->{'subfields'}->{'a'};
!               if (ref($bib->{isbn}) eq 'ARRAY') 
{$bib->{isbn}=$$bib->{isbn}[0]};
                $bib->{isbn}=~s/[^\d]*//g;
            }
***************
*** 738,746 ****
                $bib->{subtitle}=~s/ \/$//;
            }
      } # foreach field
  
      return $bib;
  
! } # sub simplemarcfields
  
  sub z3950menu {
--- 660,765 ----
                $bib->{subtitle}=~s/ \/$//;
            }
+ 
+ 
+               if ($field->{'tag'} eq '082') {
+                   $dewey=$field->{'subfields'}->{'a'};
+                   if (ref($dewey) eq 'ARRAY') { $dewey=$$dewey[0]; }
+                   $dewey=~s/\///g;
+               }
+               if ($field->{'tag'} eq '260') {
+                   $place=$field->{'subfields'}->{'a'};
+                   if (ref($place) eq 'ARRAY') { $place=$$place[0]; }
+                   $place=~s/\s*:$//g;
+ 
+                   $publisher=$field->{'subfields'}->{'b'};
+                   if (ref($publisher) eq 'ARRAY') { 
$publisher=$$publisher[0]; }
+                   $publisher=~s/\s*:$//g;
+ 
+                   $publicationyear=$field->{'subfields'}->{'c'};
+                   if ($publicationyear=~/c(\d\d\d\d)/) {
+                       $copyrightdate=$1;
+                   }
+                   if ($publicationyear=~/[^c](\d\d\d\d)/) {
+                       $publicationyear=$1;
+                   } elsif ($copyrightdate) {
+                       $publicationyear=$copyrightdate;
+                   } else {
+                       $publicationyear=~/(\d\d\d\d)/;
+                       $publicationyear=$1;
+                   }
+               }
+               if ($field->{'tag'} eq '300') {
+                   $pages=$field->{'subfields'}->{'a'};
+                   $pages=~s/ \;$//;
+                   $size=$field->{'subfields'}->{'c'};
+                   $pages=~s/\s*:$//g;
+                   $size=~s/\s*:$//g;
+               }
+               if ($field->{'tag'} eq '362') {
+                   if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
+                       $volume=$1;
+                       $number=$2;
+                   }
+               }
+               if ($field->{'tag'} eq '440') {
+                   $seriestitle=$field->{'subfields'}->{'a'};
+                   if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
+                       $volume=$1;
+                       $number=$2;
+                   }
+               }
+               if ($field->{'tag'} eq '700') {
+                   my $name=$field->{'subfields'}->{'a'};
+                   if ($field->{'subfields'}->{'e'}!~/ill/) {
+                       $additionalauthors.="$name\n";
+                   } else {
+                       $illustrator=$name;
+                   }
+               }
+               if ($field->{'tag'} =~/^5/) {
+                   $notes.="$field->{'subfields'}->{'a'}\n";
+               }
+               if ($field->{'tag'} =~/65\d/) {
+                   my $sub;
+                   my $subject=$field->{'subfields'}->{'a'};
+                   $subject=~s/\.$//;
+                   foreach $subjectsubfield ( 'x','y','z' ) {
+                     if 
($subdivision=$field->{'subfields'}->{$subjectsubfield}) {
+                       if ( ref($subdivision) eq 'ARRAY' ) {
+                           foreach $s (@$subdivision) {
+                               $s=~s/\.$//;
+                               $subject.=" -- $s";
+                           } # foreach subdivision
+                       } else {
+                           $subdivision=~s/\.$//;
+                           $subject.=" -- $subdivision";
+                       } # if array
+                     } # if subfield exists
+                   } # foreach subfield
+                   push @subjects, $subject;
+               }
+ 
+               ($dewey                 ) && ($bib->{dewey}=$dewey );
+               ($place                 ) && ($bib->{place}=$place  );
+               ($publisher             ) && ($bib->{publisher}=$publisher  );
+               ($publicationyear       ) && 
($bib->{publicationyear}=$publicationyear  );
+               ($copyrightdate         ) && 
($bib->{copyrightdate}=$copyrightdate  );
+               ($pages                 ) && ($bib->{pages}=$pages  );
+               ($size                  ) && ($bib->{size}=$size  );
+               ($volume                ) && ($bib->{volume}=$volume  );
+               ($number                ) && ($bib->{number}=$number  );
+               ($seriestitle           ) && ($bib->{seriestitle}=$seriestitle  
);
+               ($additionalauthors     ) && 
($bib->{additionalauthors}=$additionalauthors  );
+               ($illustrator           ) && ($bib->{illustrator}=$illustrator  
);
+               ($notes                 ) && ($bib->{notes}=$notes  );
+               ($subject               ) && ($bib->{subject}=$subject  );
+ 
+ 
      } # foreach field
  
      return $bib;
  
! #---------------------------------
! } # sub extractmarcfields
  
  sub z3950menu {
***************
*** 806,810 ****
                    if ( ! $title ) {
                        ($record)=parsemarcfileformat($r_marcdata);
!                       $bib=simplemarcfields($record);
                        if ( $bib->{title} ) { $title=$bib->{title} };
                    } # if no title yet
--- 825,829 ----
                    if ( ! $title ) {
                        ($record)=parsemarcfileformat($r_marcdata);
!                       $bib=extractmarcfields($record);
                        if ( $bib->{title} ) { $title=$bib->{title} };
                    } # if no title yet
***************
*** 1589,1590 ****
--- 1608,1631 ----
  } # sub checkvalidisbn
  
+ #-------------------------
+ sub BuildTagMap {
+     use strict;
+ 
+     my (@tagmaplist)address@hidden;   # input
+     my ($tagmap);             #return
+ 
+     my (
+       $row,
+       $tagnum, $subfield, $fieldname, $repeat, $stripchars,
+     );
+ 
+     foreach $row (@tagmaplist) {
+       ($tagnum, $subfield, $fieldname, $repeat, $stripchars)= @$row;
+       #print "tagnum=$tagnum name=$fieldname\n";
+       $tagmap->{$tagnum}{$subfield}{fieldname}=$fieldname;
+       $tagmap->{$tagnum}{$subfield}{repeat}=$repeat;
+       $tagmap->{$tagnum}{$subfield}{stripchars}=$stripchars;
+     } # foreach row
+     return $tagmap;
+ } # sub BuildTagMap
+ #-------------------------




reply via email to

[Prev in Thread] Current Thread [Next in Thread]