summaryrefslogtreecommitdiff
path: root/xmd/src/main.rs
blob: 42406dfa496a5147289a0f75d24852c27a9510cf (plain)
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
use pest::Parser;
use std::fs;

use xmd::CSVParser;
use xmd::Rule;

fn main() {
    let unparsed_file = fs::read_to_string("numbers.csv").expect("cannot read file");

    let file = CSVParser::parse(Rule::file, &unparsed_file)
        .expect("unsuccessful parse")
        .next()
        .unwrap();

    let mut sum: f64 = 0.0;
    let mut records: i64 = 0;

    for record in file.into_inner() {
        match record.as_rule() {
            Rule::record => {
                records += 1;

                for field in record.into_inner() {
                    sum += field.as_str().parse::<f64>().unwrap();
                }
            }
            Rule::EOI => (),
            _ => unreachable!(),
        }
    }

    println!("Sum of fields: {}", sum);
    println!("Number of records: {}", records);
}