@@ -11,6 +11,7 @@ struct Config {
11
11
pub exec : String ,
12
12
pub no_headers : bool ,
13
13
pub delimiter : String ,
14
+ pub out_delimiter : Option < String > ,
14
15
pub quote : String ,
15
16
pub arg_regex : String ,
16
17
pub new_column_name : String ,
@@ -61,6 +62,13 @@ fn main() -> Result<()> {
61
62
. help ( "CSV delimiter (\\ t for tabs)" )
62
63
. takes_value ( true ) ,
63
64
)
65
+ . arg (
66
+ Arg :: with_name ( "out-delimiter" )
67
+ . long ( "out-delimiter" )
68
+ . value_name ( "CHAR" )
69
+ . help ( "Output CSV delimiter, if different from delimiter (\\ t for tabs)" )
70
+ . takes_value ( true ) ,
71
+ )
64
72
. arg (
65
73
Arg :: with_name ( "quote" )
66
74
. long ( "quote" )
@@ -108,6 +116,7 @@ Syntax: https://docs.rs/regex/1.3.4/regex/index.html#syntax
108
116
. value_of ( "delimiter" )
109
117
. map ( String :: from)
110
118
. unwrap_or_else ( String :: new) ,
119
+ out_delimiter : matches. value_of ( "out-delimiter" ) . map ( String :: from) ,
111
120
quote : matches
112
121
. value_of ( "quote" )
113
122
. map ( String :: from)
@@ -154,12 +163,22 @@ fn run(config: Config) -> Result<()> {
154
163
}
155
164
} ;
156
165
157
- let delimiter: u8 = if & config. delimiter == r"\t" {
158
- b'\t'
159
- } else {
160
- read_one_ascii_char ( & config. delimiter ) ?
166
+ let read_delimiter = |value : & str | -> Result < u8 > {
167
+ if value == r"\t" {
168
+ Ok ( b'\t' )
169
+ } else {
170
+ read_one_ascii_char ( value)
171
+ }
161
172
} ;
162
173
174
+ let delimiter: u8 = read_delimiter ( & config. delimiter ) ?;
175
+
176
+ let out_delimiter: u8 = config
177
+ . out_delimiter
178
+ . map ( |d| read_delimiter ( & d) )
179
+ . transpose ( ) ?
180
+ . unwrap_or ( delimiter) ;
181
+
163
182
let quote: u8 = read_one_ascii_char ( & config. quote ) ?;
164
183
165
184
let variable_regex = Regex :: new ( & config. arg_regex ) ?;
@@ -173,7 +192,7 @@ fn run(config: Config) -> Result<()> {
173
192
. from_reader ( reader) ;
174
193
175
194
let mut csv_writer = csv:: WriterBuilder :: new ( )
176
- . delimiter ( delimiter )
195
+ . delimiter ( out_delimiter )
177
196
. quote ( quote)
178
197
. from_writer ( writer) ;
179
198
0 commit comments