modified: remap.pl
authorMason James <mtj@kohaaloha.com>
Mon, 6 Jul 2015 05:11:54 +0000 (17:11 +1200)
committerMason James <mtj@kohaaloha.com>
Mon, 6 Jul 2015 05:11:54 +0000 (17:11 +1200)
remap.pl

index f0c254f..4e4ac0e 100644 (file)
--- a/remap.pl
+++ b/remap.pl
@@ -18,31 +18,39 @@ my $f2 = $ARGV[1];
 
 my $file = MARC::File::XML->in($f);
 
-my $i = 1;
-
+my $i  = 1;
+my $i2 = 1;
 
 my $out = MARC::File::XML->out($f2);
 
 while ( my $r = $file->next() ) {
 
     # ## $r;
-    warn $i++;
+    #    warn $i++;
+
+    my @items = $r->field(952);
+
+    my $set = 0;
+
+    foreach my $item (@items) {
 
-    # get format, itype, cc
-    my $item = $r->field('952');
-    my $title = $r->subfield( '245', 'a' );
+        # get format, itype, cc
+        #    my $item = $r->field('952');
+        my $title = $r->subfield( '245', 'a' );
 
-    my $format = $r->subfield( '952', '5' );
-    my $itype  = $r->subfield( '952', 'y' );
-    my $cc     = $r->subfield( '952', '8' );
+        my $format = $item->subfield('5');
+        my $itype  = $item->subfield('y');
+        my $cc     = $item->subfield('8');
 
-    next unless $itype;
-    warn '--------------------------------';
+        $item->delete_subfield( code => '8' );
 
-    #warn  $title;
-    #warn  $format;
-    #warn  $itype;
-    #warn $cc;
+        #    next unless $itype;
+        #    warn '--------------------------------';
+
+        #warn  $title;
+        #warn  $format;
+        #warn  $itype;
+        #    warn $cc;
 
 =c
 
@@ -52,45 +60,75 @@ The source of this is 'BibType' in Liberty's LIBRARY file, but note:
 - bibtypes M (and m) will map to 'BK' except:
 --done i.  where Liberty's ISSUES.Format value is 'Limited Loan' then item type becomes BL (Book Limited Loan); 
 
---doneii. where ISSUES.Format is 'Library Use Only' then item type becomes LU AND items.notforloan should be set to '1' AND items.ccode should be set to 'REF';
-
-- bibtype S maps to CR (Journal);
+ bibtype S maps to CR (Journal);
 - bibtypes V, R and C map to VM (Visual Materials).
 
+--doneii. where ISSUES.Format is 'Library Use Only' then item type becomes LU AND items.notforloan should be set to '1' AND items.ccode should be set to 'REF';
+
+-
 
 
 =cut
 
-    if ( $format =~ /Limited Loan/i ) {
+        $itype = 'M' if $itype eq 'm';
 
-        $item->update( y => 'BL' );
+        if ( $itype eq 'M' ) {
+            $item->update( y => 'BK' );
 
-    }
+        }
+        elsif ( $itype eq 'S' ) {
 
-    elsif ( $format =~ /Library Use Only/i ) {
+            $item->update( y => 'CR' );
 
-        $item->update( y => 'LU' );
-        $item->update( 7 => '1' );
-        $item->update( 8 => 'REF' );
+        }
+        elsif ($itype eq 'V'
+            or $itype eq 'C'
+            or $itype eq 'R' )
+        {
 
-    }
-    else {
+#            warn $title;
+            warn $i2++;
+            $item->update( y => 'AV' );
 
-        if ( $itype =~ /M/i ) {
-            $item->update( y => 'BK' );
+            $set++;
 
         }
-        elsif ( $itype =~ /S/i ) {
-            $item->update( y => 'CR' );
+
+        # ----------------------------------------
+
+=c
+
+FORMAT values 'Fiction', 'Non-Fiction' and 'General' determine the Collection Code (CCODE) 'GEN';
+FORMAT value 'Limited Loan' determines the item type BL which is also in the 'GEN' Collection; and
+FORMAT value ''Library Use Only' determines the item type LU AND sets the NOT FOR LOAN flag AND determines the CCODE 'REF'.
+
+=cut
+
+        if ( $format =~ /Fiction|Non-Fiction|General/i ) {
+
+            #        $r->subfield( '952', '8' ) = 'GEN';
+            $item->update( 8 => 'GEN' );
 
         }
-        elsif ( $itype =~ /V|R|C/i ) {
-            $item->update( y => 'VM' );
+
+        if ( $format =~ /Limited.*Loan/i ) {
+
+            $item->update( y => 'BL' );
+            $item->update( 8 => 'GEN' ); #?
+            $set++;
 
         }
-    }
 
-    # ----------------------------------------
+        elsif ( $format =~ /Library Use Only/i ) {
+
+            $item->update( y => 'LU' );
+            $item->update( 7 => '1' );
+            $item->update( 8 => 'REF' );
+            $set++;
+
+        }
+
+        #-----------------------------------------------------------
 
 =c
 
@@ -100,45 +138,52 @@ Everything else in ISSUES.COLLECTION is discarded;
 
 =cut
 
-    if ( $cc =~ /ART THERAPY/i ) {
+        if ( defined $cc and  $cc =~ /ART.*THERAPY/i ) {
 
-        $item->update( 8 => 'AT' );
+            #exit;
 
-    }
-    elsif ( $cc =~ /New Zealand.*Pacific/i ) {
+            $item->update( 8 => 'AT' );
 
-        $item->update( 8 => 'NZP' );
+        }
 
-    }
-    else {
+        elsif ( defined $cc and $cc =~ /New Zealand.*Pacific/i ) {
 
-        $r->field('952')->delete_subfield( code => '8' );
+            #warn  $title;
 
-    }
+            $item->update( 8 => 'NZP' );
 
-    if ( $itype =~ /VM/i ) {
+            #exit;
 
-        $item->update( 8 => 'AV' );
+        }
+        elsif ( $itype eq 'VM' ) {
 
-    }
+            $item->update( 8 => 'AV' );
 
-=c
+        }
 
-FORMAT values 'Fiction', 'Non-Fiction' and 'General' determine the Collection Code (CCODE) 'GEN';
-FORMAT value 'Limited Loan' determines the item type BL which is also in the 'GEN' Collection; and
-FORMAT value ''Library Use Only' determines the item type LU AND sets the NOT FOR LOAN flag AND determines the CCODE 'REF'.
+        else {
 
-=cut
+            #        $r->field('952')->delete_subfield( code => '8' );
+            #        test ccode,
+            #        $item->delete_subfield( code => '8' );
+
+        }
+
+        ## write a bunch of records to a file
+
+        if ( $set > 1 and $itype ne 'M' ) {
+
+            warn $title, $itype  if $set > 1 and $itype ne 'M';
 
-    if ( $format =~ /Fiction|Non-Fiction|General|limited-loan/i ) {
+my $e = $r->as_formatted();
+warn $e;
 
-        #        $r->subfield( '952', '8' ) = 'GEN';
-        $item->update( 8 => 'GEN' );
+        };
 
     }
 
-    ## write a bunch of records to a file
     $out->write($r);
 
 }
 $out->close();
+warn $i2++;