chiark / gitweb /
better error messages from pipethrough_*
[ypp-sc-tools.db-live.git] / pctb / Commods.pm
index 75d48c4ee9d2ed707d4da20268274cdbfe474546..d9a2a948155c314692a9c83d46fe7daeea7cfa09 100644 (file)
@@ -84,7 +84,7 @@ sub parse_master_master1 ($$) {
        } elsif (m/^routes (\w+)$/) {
            my $ocean= $1;
            @ctx= (sub {
-               m/^(\S[^\t]*\S)\t+(\S[^\t]*\S)\t+([1-9][0-9]{0,2})$/ or die;
+               m/^(\S[^\t]*\S),\s*(\S[^\t]*\S),\s*([1-9][0-9]{0,2})$/ or die;
                $routes{$ocean}{$1}{$2}= $3;
            });
        } elsif (m/^client (\S+.*\S)$/) {
@@ -206,14 +206,14 @@ sub pipethrough_run_along ($$$@) {
     if (!$child) {
        open STDIN, "<&", $tf;
        &$childprep() if defined $childprep;
-       exec $cmd @a; die $!;
+       exec $cmd @a; die "@a $!";
     }
     return $fh;
 }
-sub pipethrough_run_finish ($) {
-    my ($fh)= @_;
+sub pipethrough_run_finish ($$) {
+    my ($fh, $what)= @_;
     $fh->error and die $!;
-    close $fh or die "$! $?";  die $? if $?;
+    close $fh or die "$what $! $?";  die $? if $?;
 }
 
 sub pipethrough_run ($$$@) {
@@ -222,7 +222,7 @@ sub pipethrough_run ($$$@) {
     my $r;
     { undef $/; $!=0; $r= <$pt>; }
     defined $r or die $!;
-    pipethrough_run_finish($pt);
+    pipethrough_run_finish($pt, "@a");
     return $r;
 }
 sub pipethrough_run_gzip ($) {
@@ -292,6 +292,14 @@ sub check_tsv_line ($$) {
        $f =~ m/^(|0|[1-9][0-9]{0,5}|\>1000)$/ or &$bad_data("bad field $i");
        ($i % 2) or ($f !~ m/\>/) or &$bad_data("> in field $i price");
     }
+
+    foreach my $i (2,4) {
+       &$bad_data("price with no qty or vice versa (field $i)")
+           if length($v[$i]) xor length($v[$i+1]);
+    }
+    length($v[2]) or length($v[4]) or
+       &$bad_data("commodity entry with no buy or sell offer");
+    
     return @v;
 }