From: ian Date: Wed, 14 Apr 2004 17:04:41 +0000 (+0000) Subject: sort by price by default X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=fa663a38dcf0e5f58fd162eeec81dfd8d9a517a3;p=trains.git sort by price by default --- diff --git a/farnell/farnell-find b/farnell/farnell-find index b5a4034..f390a70 100755 --- a/farnell/farnell-find +++ b/farnell/farnell-find @@ -74,6 +74,14 @@ our(%itemdesc); our(%iteminfo); # $iteminfo{$item}= by_item(...); +our(%show); +# $show{$item}{Head} ) newline terminated +# $show{$item}{Info} ) strings ready to print +# $show{$item}{Price} calculated value + +our($sorthow); +# desc or price + our($partword1_re)= '\S*[^ \t0-9-]\S*'; our($partword_re)= '\S*[^ \t0-9/=]\S*'; our($part_re)= "$partword1_re(?: $partword_re)*"; @@ -178,12 +186,17 @@ sub read_spec () { sub itemsortmap ($) { my ($item) = @_; - my ($bi, $title); + my ($z, $bi, $title); + if ($sorthow eq 'price') { + $z= sprintf "%030.20f ", 1.0 / ($show{$item}{Price} + 0.0001); + } else { + $z= ''; + } $bi= $iteminfo{$item}; - return "? $item" if !defined $bi; + return "? $z $item" if !defined $bi; $title= $bi->{Description}; $title .= "\n".$1 if $title =~ s/^(\[[^][]+\]) //; - return $title; + return "$z $title"; } sub analyse_spec () { @@ -247,8 +260,7 @@ sub analyse_spec () { $bi= by_item($item, $why); $iteminfo{$item}= $bi; } - foreach $item (sort { itemsortmap($a) cmp itemsortmap($b); } - keys %iteminstances) { + foreach $item (keys %iteminstances) { undef $qty; foreach $ii (@{ $iteminstances{$item} }) { if (!defined $qty) { @@ -264,27 +276,33 @@ sub analyse_spec () { $avail= $bi->{Avail}; $avail{$avail}= 1; $avail= ' '.$stockmap{$avail} if exists $stockmap{$avail}; - printf("%5d%1s %-11s %-.${desclen}s %6.2f %6.2f%1s %s\n", - $toorder, $notechar, $item, $bi->{Description}, - $bi->{Price}, $price, $notechar, $avail) - or die $!; + $show{$item}{Head}= + sprintf("%5d%1s %-11s %-.${desclen}s %6.2f %6.2f%1s %s\n", + $toorder, $notechar, $item, $bi->{Description}, + $bi->{Price}, $price, $notechar, $avail); + $show{$item}{Info}= ''; $total += $price; + $show{$item}{Price}= $price; foreach $desc (@{ $itemdesc{$item} }) { - printf("%*s %s\n", - (5+1+1+11),'', - $desc) - or die $!; + $show{$item}{Info} .= + sprintf("%*s %s\n", + (5+1+1+11),'', + $desc); } foreach $ii (@{ $iteminstances{$item} }) { $ql= $ii->{Qty}; $qr= ''; if ($ql =~ s/\D.*$//) { $qr= $&; } - printf("%*s %5s%-2s %s\n", - (5+1+5),'', - $ql,$qr, - $ii->{Use}) - or die $!; + $show{$item}{Info} .= + sprintf("%*s %5s%-2s %s\n", + (5+1+5),'', + $ql,$qr, + $ii->{Use}); } - printf "\n" or die $!; + } + foreach $item (sort { itemsortmap($a) cmp itemsortmap($b); } + keys %show) { + print $show{$item}{Head}, $show{$item}{Info}, "\n" + or die $!; } printf("%*s %11s %-*s %6.2f\n", (5+1), 'TOTAL', @@ -371,8 +389,10 @@ if (@ARGV==1 && $ARGV[0] =~ m/^\d\d\d\-/) { foreach $k (sort keys %$chr) { printf "%-20s %s\n", $k, $chr->{$k} or die $!; } -} elsif (@ARGV==1) { +} elsif (@ARGV==1 || @ARGV==2) { open F, "< $ARGV[0]" or die $!; + $sorthow= @ARGV>1 ? $ARGV[1] : 'price'; + die unless $sorthow !~ m/^(?:cost|desc)$/; read_spec(); close F or die $!; analyse_spec();