chiark
/
gitweb
/
~ian
/
appendix-a6.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
57ed77b
)
openstvoutput24compare: wip, fixes
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Tue, 23 Aug 2016 12:47:15 +0000
(13:47 +0100)
committer
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Tue, 23 Aug 2016 12:47:15 +0000
(13:47 +0100)
openstvoutput24compare
patch
|
blob
|
history
diff --git
a/openstvoutput24compare
b/openstvoutput24compare
index be52f7ac3c4e60b2de94541fa69b85288fea75f3..15f101b128b3c8abcf4566e03aff449bf447bcf6 100755
(executable)
--- a/
openstvoutput24compare
+++ b/
openstvoutput24compare
@@
-16,6
+16,7
@@
sub parseheader () {
$cboxrow++;
next;
}
$cboxrow++;
next;
}
+ s/\n$//;
if (m/^\s+[R ]\|/) {
my @entries = split /\|/, $';
$nboxcols ||= @entries;
if (m/^\s+[R ]\|/) {
my @entries = split /\|/, $';
$nboxcols ||= @entries;
@@
-43,21
+44,26
@@
sub processbody () {
my %vals;
my $donequota = 'X';
while (<>) {
my %vals;
my $donequota = 'X';
while (<>) {
+ s/\n$//;
if (m/^\s+\|--/) {
if ($cboxrow >= 0) {
die unless $cboxrow;
die unless (scalar keys %vals) == @boxheads;
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) {
}
my $quota = $vals{'Threshold '};
if ($donequota ne $quota) {
- print
" quota %10d
\n", $quota;
+ print
f " quota %10s
\n", $quota;
$donequota = $quota;
}
my $surplus = $vals{'Surplus '};
if ($surplus ne '0') {
$donequota = $quota;
}
my $surplus = $vals{'Surplus '};
if ($surplus ne '0') {
- print
" surplus %10d
\n", $surplus;
+ print
f " surplus %10s
\n", $surplus;
}
}
$cboxrow = -1;
}
}
$cboxrow = -1;
@@
-69,10
+75,10
@@
sub processbody () {
next;
}
if (m/^\s*(\d*)\|/) {
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) {
if (length $1) {
- print
"stage T
d:\n", $1 or die $!;
+ print
f "stage %
d:\n", $1 or die $!;
}
my @entries = split /\|/, $';
$nboxcols >= @entries 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+//;
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;
}
$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();
}
parseheader();
processbody();
+processfinal();