utxo_scanner/
csv_loader.rs

1
2use std::fs::File;
3use std::io::{BufRead, BufReader};
4use std::collections::BTreeMap;
5use std::io;
6use std::io::Write;
7
8pub fn load(csv_file: &str) -> BTreeMap<String, Vec<u64>> {
9
10    // Open the file
11    let file = File::open(&csv_file).unwrap_or_else(|e| {
12        panic!("Unable to open file due to error: {}", e);
13    });
14
15    // Initialize
16    let reader = BufReader::new(file);
17    let mut map: BTreeMap<String, Vec<u64>> = BTreeMap::new();
18
19     // Iterate over the lines
20    let mut line_num = 0;
21    for line in reader.lines() {
22
23        if line_num == 0 {
24            line_num += 1;
25            continue;
26        }
27
28        let line = line.unwrap();
29        let parts: Vec<_> = line.split(",").collect();
30
31        // Add to btree
32        let address = format!("{}", parts[3]);
33        map.entry(address).or_insert(Vec::new()).push(line_num as u64);
34        line_num += 1;
35
36        if line_num % 10000 == 0 {
37            print!(".");
38            io::stdout().flush().unwrap();
39        }
40    }
41
42    map
43}
44
45