1use crate::{
2 args::Flatten,
3 utils::{cli_result::CliResult, reader::IoReader, table::Table},
4};
5
6impl Flatten {
7 pub fn io_run(&self) -> CliResult {
8 let n = if self.n <= 0 {
9 usize::MAX - 10
10 } else {
11 self.n as usize
12 };
13
14 let lines = IoReader::new().no_header(self.no_header).top_n(n).lines();
16
17 if lines.len() <= 1 - self.no_header as usize {
19 return Ok(());
20 }
21
22 let columns: Vec<String> = if self.no_header {
23 (1..=self.row_field_count(&lines[0]))
24 .map(|i| format!("col{i}"))
25 .collect::<Vec<_>>()
26 } else {
27 self.split_row_to_owned_vec(&lines[0])
28 };
29
30 lines
32 .iter()
33 .skip(1 - self.no_header as usize)
34 .enumerate()
35 .for_each(|(i, l)| {
36 println!(" {}row{}", &self.delimiter, i + 1);
37 let r = self
38 .split(l)
39 .zip(&columns)
40 .map(|(v, k)| [k.as_str(), v])
41 .collect::<Vec<_>>();
42 Table::from_records(r).print_blank().unwrap();
43 });
44
45 Ok(())
46 }
47}