From 49ea4a7c89f1a34aff1714a3dcbdc3a52f5990e6 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 23 Aug 2016 13:47:15 +0100 Subject: [PATCH] openstvoutput24compare: wip, fixes --- openstvoutput24compare | 59 +++++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/openstvoutput24compare b/openstvoutput24compare index be52f7a..15f101b 100755 --- a/openstvoutput24compare +++ b/openstvoutput24compare @@ -16,6 +16,7 @@ sub parseheader () { $cboxrow++; next; } + s/\n$//; if (m/^\s+[R ]\|/) { my @entries = split /\|/, $'; $nboxcols ||= @entries; @@ -43,21 +44,26 @@ sub processbody () { my %vals; my $donequota = 'X'; while (<>) { + s/\n$//; if (m/^\s+\|--/) { if ($cboxrow >= 0) { die unless $cboxrow; die unless (scalar keys %vals) == @boxheads; - foreach my $k (sort grep { m/\S/ } keys %vals) { - print " candidate %10s : %20s votes\n" or die $!; + foreach my $k (sort grep { !m/ $/ } keys %vals) { + my $e = $vals{$k}; + next unless length $e; + printf " candidate %-10s : %20s votes\n", + $k, $e + or die $!; } my $quota = $vals{'Threshold '}; if ($donequota ne $quota) { - print " quota %10d\n", $quota; + printf " quota %10s\n", $quota; $donequota = $quota; } my $surplus = $vals{'Surplus '}; if ($surplus ne '0') { - print " surplus %10d\n", $surplus; + printf " surplus %10s\n", $surplus; } } $cboxrow = -1; @@ -69,10 +75,10 @@ sub processbody () { next; } if (m/^\s*(\d*)\|/) { - die $cboxrow unless $cboxrow >= 0; - die $cboxrow unless !!$cboxrow == !!length $1; + next unless $cboxrow >= 0; + die "$cboxrow $1" unless !$cboxrow == !!length $1; if (length $1) { - print "stage Td:\n", $1 or die $!; + printf "stage %d:\n", $1 or die $!; } my @entries = split /\|/, $'; $nboxcols >= @entries or die; @@ -83,15 +89,44 @@ sub processbody () { die if exists $vals{$h}; my $e = $entries[$cboxcol]; $e =~ s/^\s+//; - $e =~ m/^\d*\.\d*$/ or die; - $e =~ m/\d/ or die; - $e =~ s/\.0+$//; + if (length $e) { + $e =~ m/^\d*\.\d*$/ or die; + $e =~ m/\d/ or die; + $e =~ s/\.0+$//; + } $vals{$h} = $e; } + $cboxrow++; + next; + } + if (!m/\S/) { + last; + } + die; + } +} + +sub processfinal () { + while (<>) { + s/\n$//; + if (s/^Winners are //) { + s/\.$//; + my @w = split /\, /; + if (@w == 1) { + @w = split / and /, $w[0]; + } else { + $w[$#w] =~ s/^and //; + } + print "Winners:\n"; + @w = sort @w; + foreach my $i (0..$#w) { + printf " %s\n", $w[$i]; + } + print "done.\n"; } - - + } } parseheader(); processbody(); +processfinal(); -- 2.30.2