From df2c005b940d9654089060058ba52729cd14f5f1 Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 14 Apr 2004 15:58:23 +0000 Subject: [PATCH] line numbers --- farnell/farnell-find | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/farnell/farnell-find b/farnell/farnell-find index 6b72090..cd01ec5 100755 --- a/farnell/farnell-find +++ b/farnell/farnell-find @@ -39,6 +39,7 @@ use strict; use POSIX; +use IO::Handle; our(@warn); our(@fault); @@ -51,6 +52,7 @@ our(%parts); # $parts{"$circuit\n$sper"}[]{Part} or item # $parts{"$circuit\n$sper"}[]{Qty} # $parts{"$circuit\n$sper"}[]{Use} +# $parts{"$circuit\n$sper"}[]{LineNo} our(%partdef); # $partdef{"part name"}= $item; @@ -64,6 +66,7 @@ our(%iteminstances); # $iteminstances{$item}[]{Use} includes circuit # $iteminstances{$item}[]{Qty} # $iteminstances{$item}[]{Mult} number in this circuit/sper +# $iteminstances{$item}[]{LineNo} our(%itemdesc); # $itemdesc{$item}[]= $desc; @@ -79,8 +82,8 @@ our($item_re)= '\d{3}\-\d{3,7}'; our(%stockmap)= ('In Stock' => 'Y', 'Awaiting Delivery' => 'A'); -sub by_item ($) { - my ($itemcode) = @_; +sub by_item ($;$) { + my ($itemcode,$why) = @_; # looks up $itemcode (ddd-d...) at Farnell and returns # cat hash ref local ($_); @@ -104,8 +107,11 @@ sub by_item ($) { die "wrong results $sc2 ?\n" unless $sc2 eq $chr->{Shortcode}; 1; }) { + my ($emsg); $@ =~ s/\n$//; - push @warn, "item $itemcode: $@"; + $emsg= "item $itemcode: $@"; + $emsg.= " ($why)" if defined $why; + push @warn, $emsg; return undef; } $chr->{Description}= snarf('Description'); @@ -153,7 +159,7 @@ sub read_spec () { die "$_ ?"; } elsif (m,^\s+($part_re|$item_re)\s+([0-9/=]+)(?:\s+(\S.*))?$,) { push @{ $parts{"$circuit\n$iteratable"} }, { - Part => $1, Qty => $2, Use => $3 + Part => $1, Qty => $2, Use => $3, LineNo => $. }; } elsif (m/^($part_re)\s+\?\s+\=\s+(\S.*)$/) { die if exists $pkinddesc{$1}; @@ -183,7 +189,7 @@ sub itemsortmap ($) { sub analyse_spec () { my ($part,$pd,$try,@rhs,$sp,$circuit,$iteratable,$count,$pe,$use); my ($item,$qty,$ii,$bi,$toorder,$price,$total,$notechar,$desc,$ql,$qr); - my ($avail,%avail); + my ($avail,%avail,$desclen,$why); foreach $part (keys %partdef) { $item= $partdef{$part}; next if exists $itemdesc{$item}; @@ -221,20 +227,24 @@ sub analyse_spec () { } elsif (exists $partdef{$part}) { $item= $partdef{$part}; } else { - push @fault, "unknown part $part"; + push @fault, "unknown part $part (line $pe->{LineNo})"; next; } push @{ $iteminstances{$item} }, { Use => $use, Qty => $pe->{Qty}, Mult => $count, + LineNo => $pe->{LineNo} }; } } $total= 0; - my ($desclen)= 43; + $desclen= 43; foreach $item (keys %iteminstances) { - $bi= by_item($item); + $why= defined $itemdesc{$item} ? $itemdesc{$item}[0].'; ' : ''; + $why .= "line ".(join ",", map { $_->{LineNo} } + @{ $iteminstances{$item} }); + $bi= by_item($item, $why); $iteminfo{$item}= $bi; } foreach $item (sort { itemsortmap($a) cmp itemsortmap($b); } @@ -350,6 +360,7 @@ sub dump_warnerrs () { my (%r); foreach $w (@fault) { next if $r{$w}++; print("ERROR: $w\n") or die $!; } foreach $w (@warn) { next if $r{$w}++; print("WARNING: $w\n") or die $!; } + STDOUT->flush or die $!; die "errors\n" if @fault; } -- 2.30.2