more better error reporting
[migration-tools.git] / fingerprinter
index 25114d5..e89587e 100755 (executable)
@@ -40,20 +40,8 @@ for my $file (@ARGV) {
 
         my $marc = populate_marc($record, $id);
         $marc    = normalize_marc($marc);
-
-        unless ($marc->{item_form} and ($marc->{date1} =~ /\d{4}/) and
-                $marc->{record_type} and $marc->{bib_lvl} and $marc->{title}) {
-            print XF "Record ", $marc->{id}, " did not make the cut: ";
-            print XF "Missing item_form. " unless ($marc->{item_form});
-            print XF "Missing valid date1. "
-              unless (defined $marc->{date1} and $marc->{date1} =~ /\d{4}/);
-            print XF "Missing record_type. " unless ($marc->{record_type});
-            print XF "Missing bib_lvl. " unless ($marc->{bib_lvl});
-            print XF "Missing title. " unless ($marc->{title});
-            print XF "\n";
-            next;
-        }
-
+        unless (marc_isvalid($marc))
+          { dump_exception($marc); next; }
         dump_fingerprints($marc);
     }
 }
@@ -82,6 +70,8 @@ sub populate_marc {
     # date1, date2
     my $my_008 = $record->field('008');
     $my_008 = $my_008->as_string() if ($my_008);
+    unless (length $my_008 == 40)
+      { print XF ">> Bad 008 field length in rec. $id\n"; return $marc }
     $marc{date1} = substr($my_008,7,4) if ($my_008);
     $marc{date2} = substr($my_008,11,4) if ($my_008); # UNUSED
 
@@ -167,6 +157,21 @@ sub normalize_marc {
 
 
 
+=head2 marc_isvalid
+
+Checks MARC record to see if neccessary fingerprinting data is
+available
+
+=cut
+
+sub marc_isvalid {
+    my ($marc) = @_;
+    return 1 if ($marc->{item_form} and ($marc->{date1} =~ /\d{4}/) and
+                 $marc->{record_type} and $marc->{bib_lvl} and $marc->{title});
+    return 0;
+}
+
+
 =head2 dump_fingerprints
 
 =cut
@@ -225,6 +230,27 @@ sub dump_fingerprints {
 }
 
 
+
+=head2 dump_exception
+
+Write line of exception report
+
+=cut
+
+sub dump_exception {
+    my ($marc) = @_;
+    print XF "Record ", $marc->{id}, " did not make the cut: ";
+    print XF "Missing item_form. " unless ($marc->{item_form});
+    print XF "Missing date1. " unless (defined $marc->{date1});
+    print XF "Invalid date1: ", $marc->{date1}
+      unless ($marc->{date1} =~ /\d{4}/);
+    print XF "Missing record_type. " unless ($marc->{record_type});
+    print XF "Missing bib_lvl. " unless ($marc->{bib_lvl});
+    print XF "Missing title. " unless ($marc->{title});
+    print XF "\n";
+}
+
+
 =head2 initialyze
 
 Performs boring script initialization. Handles argument parsing,