From e8612ff380bcb859a9eb6ba81517c9a461440a25 Mon Sep 17 00:00:00 2001 From: Yung Siang Liau Date: Mon, 29 Jul 2024 22:04:37 +0800 Subject: [PATCH] Accept tab delimiter specified as -d \t without quotes --- src/app.rs | 1 + src/delimiter.rs | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app.rs b/src/app.rs index b7b80e3..be65a9d 100644 --- a/src/app.rs +++ b/src/app.rs @@ -171,6 +171,7 @@ impl App { let delimiter = match delimiter { Delimiter::Default => b',', + Delimiter::Tab => b'\t', Delimiter::Character(d) => d, Delimiter::Auto => sniff_delimiter(filename).unwrap_or(b','), }; diff --git a/src/delimiter.rs b/src/delimiter.rs index 698747a..4e66874 100644 --- a/src/delimiter.rs +++ b/src/delimiter.rs @@ -5,6 +5,9 @@ pub enum Delimiter { /// Use the default delimiter (comma) Default, + /// Use tab as the delimiter + Tab, + /// Use the specified delimiter Character(u8), @@ -16,7 +19,7 @@ impl Delimiter { /// Create a Delimiter by parsing the command line argument for the delimiter pub fn from_arg(delimiter_arg: &Option, tab_separation: bool) -> CsvlensResult { if tab_separation { - return Ok(Delimiter::Character('\t'.try_into()?)); + return Ok(Delimiter::Tab); } if let Some(s) = delimiter_arg { @@ -24,13 +27,17 @@ impl Delimiter { return Ok(Delimiter::Auto); } if s == r"\t" { - return Ok(Delimiter::Character(b'\t')); + return Ok(Delimiter::Tab); } let mut chars = s.chars(); let c = chars.next().ok_or_else(|| CsvlensError::DelimiterEmpty)?; if !c.is_ascii() { return Err(CsvlensError::DelimiterNotAscii(c)); } + if c == 't' { + // commonly occurrs when argument is specified like "-d \t" without quotes + return Ok(Delimiter::Tab); + } if chars.next().is_some() { return Err(CsvlensError::DelimiterMultipleCharacters(s.clone())); }