X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=appendix-a6.git;a=blobdiff_plain;f=openstvoutput24compare;h=15f101b128b3c8abcf4566e03aff449bf447bcf6;hp=be52f7ac3c4e60b2de94541fa69b85288fea75f3;hb=49ea4a7c89f1a34aff1714a3dcbdc3a52f5990e6;hpb=57ed77b598efe9c02d160c2ca3cc55512eeb7f29 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();