main/
main.rs

1extern crate botao;
2use botao::text::enum_fields;
3use botao::text::{DataRecordReader, DataRecord, DataBlockReader};
4use std::io;
5use std::fs::File;
6
7fn test_enum_fields(delim: u8, record: &str) {
8    println!("delim : {:?}", delim as char);
9    println!("record: {:?}", record);
10    for field in enum_fields(delim, record) {
11        println!("FIELD: {:?}", field);
12    }
13}
14
15fn test_nested(delim: u8, record: &str) {
16    println!("NESTED");
17    println!("record: {:?}", record);
18    for field in enum_fields(b';', record) {
19        println!("FIELD");
20        for field in enum_fields(delim, field) {
21            println!("{:?}", field);
22        }
23    }
24}
25
26fn test_datarecord_reader<R>(buf: R)
27where
28    R: io::BufRead + ::std::fmt::Debug,
29{
30    let mut rdr = DataRecordReader::new(buf);
31    println!("# test_datarecord_reader");
32    println!("{:?}", rdr);
33    loop {
34        let record = rdr.next_record().unwrap();
35        match record {
36            DataRecord::Fields(fields) => {
37                println!("FIELDS: {:?}", fields);
38            },
39            DataRecord::Comment(comment) => {
40                println!("COMMENT: {:?}", comment);
41            },
42            DataRecord::Blank => {
43                println!("BLANK");
44            },
45            DataRecord::EOF => {
46                println!("EOF");
47                break;
48            },
49        }
50    }
51}
52
53fn test_datarecord_peek<R>(buf: R)
54where
55    R: io::BufRead + ::std::fmt::Debug,
56{
57    let mut rdr = DataRecordReader::new(buf);
58    println!("# test_datarecord_reader");
59    println!("{:?}", rdr);
60    loop {
61        let record = rdr.peek_record().unwrap();
62        println!("1st : {:?}", record);
63        let record = rdr.peek_record().unwrap();
64        println!("2nd : {:?}", record);
65        let record = rdr.next_record().unwrap();
66        println!("Last: {:?}", record);
67        match record {
68            DataRecord::EOF => { break; },
69            _ => {},
70        }
71    }
72}
73
74fn test_datablock_reader<R>(buf: R)
75where
76    R: io::BufRead + ::std::fmt::Debug,
77{
78    let rdr = DataRecordReader::new(buf);
79    let mut rdr = DataBlockReader::<f64, _>::new(rdr);
80    println!("# test_datablock_reader");
81    println!("{:?}", rdr);
82
83    while let Some(vec) = rdr.next_block().unwrap() {
84        println!("{:?}", vec);
85        let count = rdr.consume_blanks().unwrap();
86        println!("... {} blank lines are consumed.", count);
87    }
88}
89
90fn main() {
91    test_enum_fields(b',', "10, 20, 30, 40");
92    test_enum_fields(b',', "10 , 20  , 30   , 40    ");
93    test_enum_fields(b',', "10, 20, 30, 40");
94    test_enum_fields(b',', "10 , 20  , 30   , 40    ");
95    test_enum_fields(b' ', "10 20  30   40 ");
96    test_enum_fields(b' ', "1.2   3.4   2.342 12.23");
97    test_enum_fields(b' ', "apple banana   orange");
98    test_nested(b',', "10, 20, 30, 40; 3.4");
99    test_nested(b',', "10, 20, 30, 40,; 3.4");
100    test_nested(b' ', "10 20 30   40  ; 3.4");
101    test_enum_fields(b',', "\n");
102    test_enum_fields(b' ', "     \n");
103    test_enum_fields(b',', ",\n");
104
105    println!("");
106    let data = b"10, 20, 30, 40\n5, 6, 7, 8\n\n1.2, 3.4 ,.05, 0.001\n";
107    test_datarecord_reader(io::BufReader::new(&data[..]));
108
109    println!("");
110    test_datarecord_reader(io::BufReader::new(File::open("examples/test1.txt").unwrap()));
111
112    println!("");
113    test_datarecord_reader(io::BufReader::new(File::open("examples/test2.txt").unwrap()));
114
115    println!("");
116    test_datarecord_peek(io::BufReader::new(File::open("examples/test2.txt").unwrap()));
117
118    println!("");
119    test_datablock_reader(io::BufReader::new(File::open("examples/test1.txt").unwrap()));
120
121    println!("");
122    test_datablock_reader(io::BufReader::new(File::open("examples/test2.txt").unwrap()));
123
124    println!("");
125    test_datablock_reader(io::BufReader::new(File::open("examples/test3.txt").unwrap()));
126
127    println!("");
128    test_datablock_reader(io::BufReader::new(File::open("examples/test4.txt").unwrap()));
129}