NAME
Vote::Count::ReadBallots
VERSION 2.01
SYNOPSIS
use Vote::Count::ReadBallots;
my $data1 = read_ballots('t/data/data1.txt');
Description
Reads a file containing vote data. Retruns a HashRef of a Vote::Count BallotSet.
All public methods are exported.
BallotSet Data Structure
ballots {
CHOCOLATE:MINTCHIP:VANILLA {
count 1,
votevalue 1, # needed for STV support
votes [
[0] "CHOCOLATE",
[1] "MINTCHIP",
[2] "VANILLA"
]
},
},
choices {
CHOCOLATE 1,
MINTCHIP 1,
VANILLA 1
},
votescast 1,
comment "# Optional Comment",
options {
rcv 1
}
Data File Format
# This is a comment, optional.
:CHOICES:VANILLA:CHOCOLATE:STRAWBERRY:MINTCHIP:CARAMEL:RUMRAISIN
5:VANILLA:CHOCOLATE:STRAWBERRY
RUMRAISIN
CHOICES must be defined before any vote lines. or an error will be thrown. CHOICES must only be defined once. These two rules are to protect against errors in manually prepared files.
A data line may begin with a number or a choice. When there is no number the line is counted as being a single ballot. The number represents the number of ballots identical to that one; this notation will both dramatically shrink the data files and improve performance.
read_ballots
Reads a data file in the standard Vote::Count format and returns a BallotSet.
write_ballots
write_ballots( $BallotSet, $newfile);
Write out a ballotset. Useful for creating a compressed version of a raw file.
Range Ballots
Range Ballots are supported in both JSON and YAML format. The read method doesn't perform validation like read_ballots does.
Range Ballot Format in JSON
{
"choices": [
"TWEEDLEDEE",
"TWEEDLEDUM",
"HUMPTYDUMPTY"
],
"ballots": [
{
"votes": {
"TWEEDLEDEE": 1,
"TWEEDLEDUM": 1,
"HUMPTYDUMPTY": 3
},
"count": 3
}
],
"depth": 3
}
read_range_ballots
Requires a parameter of a JSON or YAML file. The second parameter may be either 'json' or 'yaml', defaulting to 'json'.
my $BestFastFood = read_range_ballots('t/data/fastfood.range.json');
my $BestFastFood = read_range_ballots('t/data/fastfood.range.yml', 'yaml');
write_range_ballots
Takes three parameters, a BallotSet, a file location, and a value of 'json' or 'yaml'. The first two parameters are required, the third defaults to 'json'.
write_range_ballots( $BestFastFood, '/tmp/fast.json', 'json' );
BUG TRACKER
https://github.com/brainbuz/Vote-Count/issues
AUTHOR
John Karr (BRAINBUZ) brainbuz@cpan.org
CONTRIBUTORS
Copyright 2019-2021 by John Karr (BRAINBUZ) brainbuz@cpan.org.
LICENSE
This module is released under the GNU Public License Version 3. See license file for details. For more information on this license visit http://fsf.org.
SUPPORT
This software is provided as is, per the terms of the GNU Public License. Professional support and customisation services are available from the author.