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}