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

Alan Millar amillar at users.sourceforge.net
Wed Jun 5 19:19:06 CEST 2002


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 @sub=@$gensubdivision;
! 			if ($#sub>=0) {
! 			    foreach $s (@sub) {
! 				$s=~s/\.$//;
! 				$subject.=" -- $s";
! 			    }
! 			} else {
! 			    $gensubdivision=~s/\.$//;
! 			    $subject.=" -- $gensubdivision";
! 			}
! 		    }
! 		    if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
! 			my @sub=@$chronsubdivision;
! 			if ($#sub>=0) {
! 			    foreach $s (@sub) {
! 				$s=~s/\.$//;
! 				$subject.=" -- $s";
! 			    }
! 			} else {
! 			    $chronsubdivision=~s/\.$//;
! 			    $subject.=" -- $chronsubdivision";
! 			}
! 		    }
! 		    if ($geosubdivision=$field->{'subfields'}->{'z'}) {
! 			my @sub=@$geosubdivision;
! 			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)=@_;	# 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
+ #-------------------------





More information about the Koha-cvs mailing list