CVS: koha/acqui.simple marcimport.pl,NONE,1.1
Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv17369 Added Files: marcimport.pl Log Message: Added rudimentary marc importing tool. Just takes a marc record and converts to koha database. Does not keep data in marc format. --- NEW FILE --- #!/usr/bin/perl my $lc1='#dddddd'; my $lc2='#ddaaaa'; use C4::Database; use CGI; use DBI; #use strict; use C4::Acquisitions; use C4::Output; my $dbh=C4Connect; my $userid=$ENV{'REMOTE_USER'}; %tagtext = ( '001' => 'Control number', '003' => 'Control number identifier', '005' => 'Date and time of latest transaction', '006' => 'Fixed-length data elements -- additional material characteristics', '007' => 'Physical description fixed field', '008' => 'Fixed length data elements', '010' => 'LCCN', '015' => 'LCCN Cdn', '020' => 'ISBN', '022' => 'ISSN', '037' => 'Source of acquisition', '040' => 'Cataloging source', '041' => 'Language code', '043' => 'Geographic area code', '050' => 'Library of Congress call number', '060' => 'National Library of Medicine call number', '082' => 'Dewey decimal call number', '100' => 'Main entry -- Personal name', '110' => 'Main entry -- Corporate name', '130' => 'Main entry -- Uniform title', '240' => 'Uniform title', '245' => 'Title statement', '246' => 'Varying form of title', '250' => 'Edition statement', '256' => 'Computer file characteristics', '260' => 'Publication, distribution, etc.', '263' => 'Projected publication date', '300' => 'Physical description', '306' => 'Playing time', '440' => 'Series statement / Added entry -- Title', '490' => 'Series statement', '500' => 'General note', '504' => 'Bibliography, etc. note', '505' => 'Formatted contents note', '508' => 'Creation/production credits note', '510' => 'Citation/references note', '511' => 'Participant or performer note', '520' => 'Summary, etc. note', '521' => 'Target audience note (ie age)', '530' => 'Additional physical form available note', '538' => 'System details note', '586' => 'Awards note', '600' => 'Subject added entry -- Personal name', '610' => 'Subject added entry -- Corporate name', '650' => 'Subject added entry -- Topical term', '651' => 'Subject added entry -- Geographic name', '656' => 'Index term -- Occupation', '700' => 'Added entry -- Personal name', '710' => 'Added entry -- Corporate name', '730' => 'Added entry -- Uniform title', '740' => 'Added entry -- Uncontrolled related/analytical title', '800' => 'Series added entry -- Personal name', '830' => 'Series added entry -- Uniform title', '852' => 'Location', '856' => 'Electronic location and access', ); my $input = new CGI; my $dbh=C4Connect; print $input->header; print startpage(); print startmenu('acquisitions'); my $file=$input->param('file'); if ($input->param('insertnewrecord')) { my $isbn=$input->param('isbn'); my $issn=$input->param('issn'); my $lccn=$input->param('lccn'); my $q_origisbn=$dbh->quote($input->param('origisbn')); my $q_origissn=$dbh->quote($input->param('origissn')); my $q_origlccn=$dbh->quote($input->param('origlccn')); my $q_isbn=$dbh->quote((($isbn) || ('NIL'))); my $q_issn=$dbh->quote((($issn) || ('NIL'))); my $q_lccn=$dbh->quote((($lccn) || ('NIL'))); $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn)"); $sth->execute; my $sth=$dbh->prepare("select biblionumber,biblioitemnumber from biblioitems where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn"); $sth->execute; my $biblionumber=0; my $biblioitemnumber=0; print "<center>\n"; print "<a href=marcimport.pl?file=$file>New Record</a> | <a href=marcimport.pl>New File</a><br>\n"; if ($sth->rows) { ($biblionumber, $biblioitemnumber) = $sth->fetchrow; my $title=$input->param('title'); print << "EOF"; <table border=0 width=50% cellpadding=10 cellspacing=0> <tr><th bgcolor=black><font color=white>Record already in database</font></th></tr> <tr><td bgcolor=#dddddd>$title is already in the database with biblionumber $biblionumber and biblioitemnumber $biblioitemnumber</td></tr> </table> <p> EOF } else { my $q_title=$dbh->quote($input->param('title')); my $q_subtitle=$dbh->quote($input->param('subtitle')); my $q_author=$dbh->quote($input->param('author')); my $q_copyrightdate=$dbh->quote($input->param('copyrightdate')); my $q_seriestitle=$dbh->quote($input->param('seriestitle')); $sth=$dbh->prepare("select biblionumber from biblio where title=$q_title and author=$q_author and copyrightdate=$q_copyrightdate and seriestitle=$q_seriestitle"); $sth->execute; if ($sth->rows) { ($biblionumber) = $sth->fetchrow; } else { $sth=$dbh->prepare("select max(biblionumber) from biblio"); $sth->execute; ($biblionumber) = $sth->fetchrow; $biblionumber++; $sth=$dbh->prepare("insert into biblio (biblionumber, title, author, copyrightdate, seriestitle) values ($biblionumber, $q_title, $q_author, $q_copyrightdate, $q_seriestitle)"); $sth->execute; $sth=$dbh->prepare("insert into bibliosubtitle (biblionumber,subtitle) values ($biblionumber, $q_subtitle)"); $sth->execute; } $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems"); $sth->execute; ($biblioitemnumber) = $sth->fetchrow; $biblioitemnumber++; my $q_isbn=$dbh->quote($isbn); my $q_issn=$dbh->quote($issn); my $q_lccn=$dbh->quote($lccn); my $q_volume=$dbh->quote($input->param('volume')); my $q_number=$dbh->quote($input->param('number')); my $q_itemtype=$dbh->quote($input->param('itemtype')); my $q_dewey=$dbh->quote($input->param('dewey')); my $q_subclass=$dbh->quote($input->param('subclass')); my $q_publicationyear=$dbh->quote($input->param('publicationyear')); my $q_publishercode=$dbh->quote($input->param('publishercode')); my $q_volumedate=$dbh->quote($input->param('volumedate')); my $q_volumeddesc=$dbh->quote($input->param('volumeddesc')); my $q_illus=$dbh->quote($input->param('illustrator')); my $q_pages=$dbh->quote($input->param('pages')); my $q_notes=$dbh->quote($input->param('note')); my $q_size=$dbh->quote($input->param('size')); my $q_place=$dbh->quote($input->param('place')); my $q_marc=$dbh->quote($input->param('marc')); $sth=$dbh->prepare("insert into biblioitems (biblioitemnumber, biblionumber, volume, number, itemtype, isbn, issn, dewey, subclass, publicationyear, publishercode, volumedate, volumeddesc, illus, pages, notes, size, place, lccn, marc) values ($biblioitemnumber, $biblionumber, $q_volume, $q_number, $q_itemtype, $q_isbn, $q_issn, $q_dewey, $q_subclass, $q_publicationyear, $q_publishercode, $q_volumedate, $q_volumeddesc, $q_illus, $q_pages, $q_notes, $q_size, $q_place, $q_lccn, $q_marc)"); $sth->execute; my $subjectheadings=$input->param('subject'); my $additionalauthors=$input->param('additionalauthors'); my @subjectheadings=split(/\n/,$subjectheadings); my $subjectheading; foreach $subjectheading (@subjectheadings) { # remove any line ending characters (Ctrl-J or M) $subjectheading=~s/\013//g; $subjectheading=~s/\010//g; # convert to upper case $subjectheading=uc($subjectheading); chomp ($subjectheading); while (ord(substr($subjectheading, length($subjectheading)-1, 1))<14) { chop $subjectheading; } # quote value my $q_subjectheading=$dbh->quote($subjectheading); $sth=$dbh->prepare("insert into bibliosubject (biblionumber,subject) values ($biblionumber, $q_subjectheading)"); $sth->execute; } my @additionalauthors=split(/\n/,$additionalauthors); my $additionalauthor; foreach $additionalauthor (@additionalauthors) { # remove any line ending characters (Ctrl-L or Ctrl-M) $additionalauthor=~s/\013//g; $additionalauthor=~s/\010//g; # convert to upper case $additionalauthor=uc($additionalauthor); # quote value my $q_additionalauthor=$dbh->quote($additionalauthor); $sth=$dbh->prepare("insert into additionalauthors (biblionumber,author) values ($biblionumber, $q_additionalauthor)"); $sth->execute; } my $title=$input->param('title'); print << "EOF"; <table cellpadding=10 cellspacing=0 border=0 width=50%> <tr><th bgcolor=black><font color=white>Record entered into database</font></th></tr> <tr><td bgcolor=#dddddd>$title has been entered into the database with biblionumber $biblionumber and biblioitemnumber $biblioitemnumber</td></tr> </table> EOF } my $title=$input->param('title'); $sth=$dbh->prepare("select max(barcode) from items"); $sth->execute; my ($barcode) = $sth->fetchrow; $barcode++; print << "EOF"; <table border=0 cellpadding=10 cellspacing=0> <tr><th bgcolor=black><font color=white> Add a New Item for $title </font> </th></tr> <tr><td bgcolor=#dddddd> <form> <input type=hidden name=newitem value=1> <input type=hidden name=biblionumber value=$biblionumber> <input type=hidden name=biblioitemnumber value=$biblioitemnumber> <input type=hidden name=file value=$file> <table border=0> <tr><td>BARCODE</td><td><input name=barcode size=10 value=$barcode> Home Branch: <select name=homebranch><option value='STWE'>Stewart Elementary<option value='MEZ'>Meziadin Elementary</select></td></tr> </tr><td>Replacement Price:</td><td><input name=replacementprice size=10></td></tr> <tr><td>Notes</td><td><textarea name=notes rows=4 cols=40 wrap=physical></textarea></td></tr> </table> </td></tr> </table> <p> <input type=submit value="Add Item"> </form> EOF print endmenu(); print endpage(); exit; } if ($input->param('newitem')) { my $barcode=$input->param('barcode'); my $q_barcode=$dbh->quote($barcode); my $q_notes=$dbh->quote($input->param('notes')); my $q_homebranch=$dbh->quote($input->param('homebranch')); my $biblionumber=$input->param('biblionumber'); my $biblioitemnumber=$input->param('biblioitemnumber'); my $replacementprice=($input->param('replacementprice') || 0); my $sth=$dbh->prepare("select max(itemnumber) from items"); $sth->execute; my ($itemnumber) = $sth->fetchrow; $itemnumber++; my @datearr=localtime(time); my $date=(1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3]; $sth=$dbh->prepare("insert into items (itemnumber, biblionumber, biblioitemnumber, barcode, itemnotes, homebranch, holdingbranch, dateaccessioned, replacementprice) values ($itemnumber, $biblionumber, $biblioitemnumber, $q_barcode, $q_notes, $q_homebranch, 'STWE', '$date', $replacementprice)"); $sth->execute; } if ($file) { my $qisbn=$input->param('isbn'); my $qissn=$input->param('issn'); my $qlccn=$input->param('lccn'); my $qcontrolnumber=$input->param('controlnumber'); if ($qisbn || $qissn || $qlccn || $qcontrolnumber) { print "<a href=marcimport.pl>New File</a><hr>\n"; open (F, "$file"); my $data=<F>; $splitchar=chr(29); my @records; 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"; $record=substr($record,24); $splitchar2=chr(30); my $directory=0; my $tagcounter=0; my %tag; my @record; foreach $field (split(/$splitchar2/, $record)) { my %field; ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1); unless ($directory) { $directory=$field; my $itemcounter=1; $counter=0; while ($item=substr($directory,0,12)) { $tag=substr($directory,0,3); $length=substr($directory,3,4); $start=substr($directory,7,6); $directory=substr($directory,12); $tag{$counter}=$tag; $counter++; } $directory=1; next; } $tag=$tag{$tagcounter}; $tagcounter++; $field{'tag'}=$tag; $marctext.="<tr><td bgcolor=$color valign=top>$tagtext{$tag}</td><td bgcolor=$color valign=top>$tag</td>"; $splitchar3=chr(31); my @subfields=split(/$splitchar3/, $field); $indicator=$subfields[0]; $field{'indicator'}=$indicator; my $firstline=1; if ($#subfields==0) { $marctext.="<td bgcolor=$color valign=top>$indicator</td></tr>"; } else { 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"; if ($subfields{$subfieldcode}) { my $subfieldlist=$subfields{$subfieldcode}; my @subfieldlist=@$subfieldlist; if ($#subfieldlist>=0) { push (@subfieldlist, $subfield); } else { @subfieldlist=($subfields{$subfieldcode}, $subfield); } $subfields{$subfieldcode}=\@subfieldlist; } else { $subfields{$subfieldcode}=$subfield; } } $marctext.="</table></td></tr>\n"; $field{'subfields'}=\%subfields; } push (@record, \%field); } $marctext.="</table>\n"; $marctext{\@record}=$marctext; $marc{\@record}=$record; push (@records, \@record); $counter++; } RECORD: foreach $record (@records) { my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $additionalauthors, $illustrator, $copyrightdate, $seriestitle); 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/) { $note.="$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; } } $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40); $marcinput=$input->hidden(-name=>'marc', -default=>$marc); $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$subtitle, -size=>40); $authorinput=$input->textfield(-name=>'author', -default=>$author); $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$illustrator); $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20); my $subject=''; foreach (@subjects) { $subject.="$_\n"; } $subjectinput=$input->textarea(-name=>'subject', -default=>$subject, -rows=>4, -cols=>40); $noteinput=$input->textarea(-name=>'note', -default=>$note, -rows=>4, -cols=>40, -wrap=>'physical'); $copyrightinput=$input->textfield(-name=>'copyrightdate', -default=>$copyrightdate); $seriestitleinput=$input->textfield(-name=>'seriestitle', -default=>$seriestitle); $volumeinput=$input->textfield(-name=>'volume', -default=>$volume); $volumedateinput=$input->textfield(-name=>'volumedate', -default=>$volumedate); $volumeddescinput=$input->textfield(-name=>'volumeddesc', -default=>$volumeddesc); $numberinput=$input->textfield(-name=>'number', -default=>$number); $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn); $issninput=$input->textfield(-name=>'issn', -default=>$issn); $lccninput=$input->textfield(-name=>'lccn', -default=>$lccn); $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn); $deweyinput=$input->textfield(-name=>'dewey', -default=>$dewey); $cleanauthor=$author; $cleanauthor=~s/[^A-Za-z]//g; $subclassinput=$input->textfield(-name=>'subclass', -default=>uc(substr($cleanauthor,0,3))); $publisherinput=$input->textfield(-name=>'publishercode', -default=>$publisher); $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear); $placeinput=$input->textfield(-name=>'place', -default=>$place); $pagesinput=$input->textfield(-name=>'pages', -default=>$pages); $sizeinput=$input->textfield(-name=>'size', -default=>$size); $fileinput=$input->hidden(-name=>'file', -default=>$file); $origisbn=$input->hidden(-name=>'origisbn', -default=>$isbn); $origissn=$input->hidden(-name=>'origissn', -default=>$issn); $origlccn=$input->hidden(-name=>'origlccn', -default=>$lccn); $origcontrolnumber=$input->hidden(-name=>'origcontrolnumber', -default=>$controlnumber); my $itemtypeselect=''; $sth=$dbh->prepare("select itemtype,description from itemtypes"); $sth->execute; while (my ($itemtype, $description) = $sth->fetchrow) { $itemtypeselect.="<option value=$itemtype>$itemtype - $description\n"; } ($qissn) || ($qissn='NIL'); ($qlccn) || ($qlccn='NIL'); ($qisbn) || ($qisbn='NIL'); ($qcontrolnumber) || ($qcontrolnumber='NIL'); unless (($isbn eq $qisbn) || ($issn eq $qissn) || ($lccn eq $qlccn) || ($controlnumber eq $qcontrolnumber)) { next RECORD; } print << "EOF"; <center> <h1>New Record</h1> Full MARC Record available at bottom <form method=post> <table border=1> <tr><td>Title</td><td>$titleinput</td></tr> <tr><td>Subtitle</td><td>$subtitleinput</td></tr> <tr><td>Author</td><td>$authorinput</td></tr> <tr><td>Additional Authors</td><td>$additionalauthorsinput</td></tr> <tr><td>Illustrator</td><td>$illustratorinput</td></tr> <tr><td>Copyright</td><td>$copyrightinput</td></tr> <tr><td>Series Title</td><td>$seriestitleinput</td></tr> <tr><td>Volume</td><td>$volumeinput</td></tr> <tr><td>Number</td><td>$numberinput</td></tr> <tr><td>Volume Date</td><td>$volumedateinput</td></tr> <tr><td>Volume Description</td><td>$volumeddescinput</td></tr> <tr><td>Subject</td><td>$subjectinput</td></tr> <tr><td>Notes</td><td>$noteinput</td></tr> <tr><td>Item Type</td><td><select name=itemtype>$itemtypeselect</select></td></tr> <tr><td>ISBN</td><td>$isbninput</td></tr> <tr><td>ISSN</td><td>$issninput</td></tr> <tr><td>LCCN</td><td>$lccninput</td></tr> <tr><td>Dewey</td><td>$deweyinput</td></tr> <tr><td>Subclass</td><td>$subclassinput</td></tr> <tr><td>Publication Year</td><td>$pubyearinput</td></tr> <tr><td>Publisher</td><td>$publisherinput</td></tr> <tr><td>Place</td><td>$placeinput</td></tr> <tr><td>Pages</td><td>$pagesinput</td></tr> <tr><td>Size</td><td>$sizeinput</td></tr> </table> <input type=submit> <input type=hidden name=insertnewrecord value=1> $fileinput $marcinput $origisbn $origissn $origlccn $origcontrolnumber </form> $marctext EOF } } else { open (F, "$file"); my $data=<F>; $splitchar=chr(29); my @records; foreach $record (split(/$splitchar/, $data)) { $leader=substr($record,0,24); #print "<tr><td>Leader:</td><td>$leader</td></tr>\n"; $record=substr($record,24); $splitchar2=chr(30); my $directory=0; my $tagcounter=0; my %tag; my @record; foreach $field (split(/$splitchar2/, $record)) { my %field; ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1); unless ($directory) { $directory=$field; my $itemcounter=1; $counter=0; while ($item=substr($directory,0,12)) { $tag=substr($directory,0,3); $length=substr($directory,3,4); $start=substr($directory,7,6); $directory=substr($directory,12); $tag{$counter}=$tag; $counter++; } $directory=1; next; } $tag=$tag{$tagcounter}; $tagcounter++; $field{'tag'}=$tag; $splitchar3=chr(31); my @subfields=split(/$splitchar3/, $field); $indicator=$subfields[0]; $field{'indicator'}=$indicator; my $firstline=1; unless ($#subfields==0) { my %subfields; for ($i=1; $i<=$#subfields; $i++) { my $text=$subfields[$i]; my $subfieldcode=substr($text,0,1); my $subfield=substr($text,1); if ($subfields{$subfieldcode}) { my $subfieldlist=$subfields{$subfieldcode}; my @subfieldlist=@$subfieldlist; if ($#subfieldlist>=0) { # print "$tag Adding to array $subfieldcode -- $subfield<br>\n"; push (@subfieldlist, $subfield); } else { # print "$tag Arraying $subfieldcode -- $subfield<br>\n"; @subfieldlist=($subfields{$subfieldcode}, $subfield); } $subfields{$subfieldcode}=\@subfieldlist; } else { $subfields{$subfieldcode}=$subfield; } } $field{'subfields'}=\%subfields; } push (@record, \%field); } push (@records, \@record); $counter++; } print << "EOF"; <center> <p> <a href=marcimport.pl>Select a New File</a> <p> <table border=0 cellpadding=10 cellspacing=0> <tr><th bgcolor=black><font color=white>Select a Record to Import</font></th></tr> <tr><td bgcolor=#dddddd> EOF my $text=''; foreach $record (@records) { my @subjects=(); my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $controlnumber); foreach $field (@$record) { $text.=$field->{'tag'}."\n"; foreach (keys %{$field->{'subfields'}}) { my $value=$field->{'subfields'}->{$_}; $text.=" $_: $value\n"; } 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'} =~/^5/) { $note.="$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; } } my $q_isbn=$dbh->quote((($isbn) || ('NIL'))); my $q_issn=$dbh->quote((($issn) || ('NIL'))); my $q_lccn=$dbh->quote((($lccn) || ('NIL'))); my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL'))); my $sth=$dbh->prepare("select * from marcrecorddone where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or controlnumber=$q_controlnumber"); $sth->execute; my $donetext=''; if ($sth->rows) { $donetext="DONE"; } $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn"); $sth->execute; if ($sth->rows) { $donetext="DONE"; } if ($isbn) { print "<a href=marcimport.pl?file=$file&isbn=$isbn>$title by $author</a> $donetext<br>\n"; } elsif ($lccn) { print "<a href=marcimport.pl?file=$file&lccn=$lccn>$title by $author</a> $donetext<br>\n"; } elsif ($issn) { print "<a href=marcimport.pl?file=$file&issn=$issn>$title by $author</a><br> $donetext\n"; } elsif ($controlnumber) { print "<a href=marcimport.pl?file=$file&controlnumber=$controlnumber>$title by $author</a><br> $donetext\n"; } else { print "Error: Contact steve regarding $title by $author<br>\n"; } } print "</td></tr></table>\n"; } } else { opendir(D, "/home/$userid/"); my @dirlist=readdir D; foreach $file (@dirlist) { (next) if ($file=~/^\./); (next) if ($file=~/^nsmail$/); (next) if ($file=~/^public_html$/); ($file=~/\.mrc/) || ($filelist.="$file<br>\n"); (next) unless ($file=~/\.mrc$/); $file=~s/ /\%20/g; print "<a href=marcimport.pl?file=/home/$userid/$file>$file</a><br>\n"; } print << "EOF"; <form method=get> File to read MARC records from: <input name=file size=30> <p> Other files in home directory:<p> $filelist </form> EOF } print endmenu(); print endpage();
participants (1)
-
Steve Tonnesen