forked from chip-moore/sc-audit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
el68aPrcOrder.pl
129 lines (105 loc) · 3.57 KB
/
el68aPrcOrder.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# perl code
# el68aPrcOrder.pl
# Copyright (c) 2011 Chip Moore
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to the
# following conditions:
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software. THE SOFTWARE IS
# PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
# parse a el68a system log file and rewrite in precinct order as opposed to
# the default temporal order.
use strict;
require utl;
require rgex;
# Use base class Exporter in order to export methods "myHelp" and "help"
# so that these can be called and passed around in objects including this
# package without need of namespace qualifier.
use base 'Exporter';
our @EXPORT = ( 'help' );
my $args = utl::parseCommandLine( \@ARGV, 4, "-d_-i_-o", \&help );
# Okay, this is not obvious but the date string in the ARGV array may
# contain multiple dates with underscore characters between the dates, for
# instance, "11-02_11-03_11-04". Here we replace the "_" with a "|"
# character and assign it to the $date variable.
( my $date = $args->{ "-d" } ) =~ s/_/|/g;
my $in = $args->{ "-i" };
my $out = $args->{ "-o" };
# open input and output files
open( my $IN, "< $in" ) || die "Unable to open $in\n";
open( my $OUT, "> $out" ) || die "Unable to create $out\n";
# If modifying all the entries, use this string to match all dates,
# otherwise use the string in ARGV array. The date string always has two
# digit numbers separated by a dash.
if ( !$date )
{
$date = $rgex::date;
}
# all voting records sorted by precinct
my %records = ();
# the current mode, group and prc for downloading voting results.
my $md;
my $grp;
my $prc;
while ( <$IN> )
{
chomp;
# Consider all lines in the file if no date parameters are defined.
# Otherwise, only lines with the appropriate date or dates are looked
# at.
if ( /$date/ )
{
if ( /PRC\s(\d{4})/ )
{
$prc = $1;
# if downloading votes, add group and mode info
if ( /\(BALS=\d{1,4}\sTOT=\d{1,4}\)/ )
{
$_ .= " (MODE=$md GRP=$grp)";
}
if ( defined( $records{ $prc } ) )
{
my $t = $records{ $prc };
$t .= "_" . $_;
$records{ $prc } = $t;
}
else
{
$records{ $prc } = $_;
}
}
elsif ( /DATABASE\sRESET/ )
{
utl::appendHash( $_, "_", \%records );
}
elsif ( /START\s650\sDOWNLOAD\s\((Replace|Add-to).*?\)\s\(GRP\s(\d{1,2})\)/ )
{
$md = $1;
$grp = $2;
}
}
}
utl::printHashRecords( $OUT, "", "_", \%records );
#######################################################
#
# help functions
#
#######################################################
sub help
{
print "\nperl el68aPrcOrder.pl -i [input file] \n";
print " -o [output file] -d [date]\n\n";
print "Rewrite precinct records in el68a system log file\n";
print "in precinct order instead of temporal order\n";
exit();
}