From e5f21b43e1ce20ed258b405afd81c739fc220949 Mon Sep 17 00:00:00 2001 From: Nicolas Sanchez Date: Thu, 30 Oct 2025 21:08:21 +0100 Subject: [PATCH] bufwriter --- src/xlsxtocsv.rs | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/xlsxtocsv.rs b/src/xlsxtocsv.rs index 7548757..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}; @@ -8,8 +9,6 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { let book = reader::xlsx::read(Path::new(&args.file)) .expect(format!("Can't open {}", args.file).as_str()); - let mut buffer = BufferWriter::new(); - if args.list_worksheets { println!("Liste of worksheets :"); let mut i = 0; @@ -103,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 { @@ -116,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; @@ -137,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)) { @@ -194,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(""), } }