diff --git a/src/xlsxtocsv.rs b/src/xlsxtocsv.rs index 9edf0e2..be33c17 100644 --- a/src/xlsxtocsv.rs +++ b/src/xlsxtocsv.rs @@ -1,3 +1,4 @@ +use std::io::{BufWriter, Write, stdout}; use std::path::Path; use umya_spreadsheet::{Cell, Range, Worksheet, reader}; @@ -101,6 +102,9 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { return Err(Error::new("Number of rows < number of rows to skip")); } + let stdout = stdout(); + let mut writer = BufWriter::new(stdout.lock()); + // for each row... let mut seq_row_num = 0; for i in (args.skip_rows+1)..=num_rows { @@ -114,16 +118,18 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { } None => { seq_row_num += 1; - number_row(&args.number_rows, args.separator, seq_row_num, i); - print!("{}", empty_row); + writer.write(number_row(&args.number_rows, args.separator, seq_row_num, i).as_bytes()).unwrap(); + writer.write(empty_row.as_bytes()).unwrap(); continue; } } } + let mut line = String::from(""); + // number the row seq_row_num += 1; - number_row(&args.number_rows, args.separator, seq_row_num, i); + line += number_row(&args.number_rows, args.separator, seq_row_num, i).as_str(); // for each column in row... let mut first = true; @@ -135,7 +141,7 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { if first { first = false; } else { - print!("{}", args.separator); + line.push(args.separator); } let cell = match sheet.get_cell((j, i)) { @@ -192,19 +198,20 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { )); } } - print!("{}", value); + line += value.as_str(); } - print!("{}", args.end_of_line); + line += args.end_of_line.as_str(); + writer.write(line.as_bytes()).unwrap(); } Ok(()) } -fn number_row(number_row: &NumberRows, separator: char, seqrownum: u32, i: u32) { +fn number_row(number_row: &NumberRows, separator: char, seqrownum: u32, i: u32) -> String { match number_row { - NumberRows::AsIs => print!("{}{}", i, separator), - NumberRows::Sequential => print!("{}{}", seqrownum, separator), - NumberRows::None => {} + NumberRows::AsIs => format!("{}{}", i, separator), + NumberRows::Sequential => format!("{}{}", seqrownum, separator), + NumberRows::None => String::from(""), } } diff --git a/xlsxtocsv.exe b/xlsxtocsv.exe index 5681f0c..2e2c5d1 100755 Binary files a/xlsxtocsv.exe and b/xlsxtocsv.exe differ diff --git a/xlsxtocsv.pdf b/xlsxtocsv.pdf old mode 100644 new mode 100755 index 2e71bc4..777d56e Binary files a/xlsxtocsv.pdf and b/xlsxtocsv.pdf differ