encoding.csv: allow passing a custom delimiter to the `new_reader` function (#13910)
parent
782d5374c9
commit
38853568b4
|
@ -50,12 +50,19 @@ pub mut:
|
|||
row_pos int
|
||||
}
|
||||
|
||||
// new_reader initializes a Reader with string data to parse
|
||||
pub fn new_reader(data string) &Reader {
|
||||
[params]
|
||||
pub struct ReaderConfig {
|
||||
delimiter byte = `,`
|
||||
comment byte = `#`
|
||||
}
|
||||
|
||||
// new_reader initializes a Reader with string data to parse and,
|
||||
// optionally, a custom delimiter.
|
||||
pub fn new_reader(data string, config ReaderConfig) &Reader {
|
||||
return &Reader{
|
||||
delimiter: `,`
|
||||
comment: `#`
|
||||
data: data
|
||||
delimiter: config.delimiter
|
||||
comment: config.comment
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,34 @@ fn test_encoding_csv_reader() {
|
|||
assert row_count == 3
|
||||
}
|
||||
|
||||
fn test_encoding_csv_reader_with_custom_delimiter() {
|
||||
data := 'name|email|phone|other\njoe|joe@blow.com|0400000000|test\nsam|sam@likesham.com|0433000000|"test quoted field"\n#chris|chris@nomail.com|94444444|"commented row"\n'
|
||||
mut csv_reader := csv.new_reader(data, delimiter: `|`)
|
||||
mut row_count := 0
|
||||
for {
|
||||
row := csv_reader.read() or { break }
|
||||
row_count++
|
||||
if row_count == 1 {
|
||||
assert row[0] == 'name'
|
||||
assert row[1] == 'email'
|
||||
assert row[2] == 'phone'
|
||||
assert row[3] == 'other'
|
||||
} else if row_count == 2 {
|
||||
assert row[0] == 'joe'
|
||||
assert row[1] == 'joe@blow.com'
|
||||
assert row[2] == '0400000000'
|
||||
assert row[3] == 'test'
|
||||
} else if row_count == 3 {
|
||||
assert row[0] == 'sam'
|
||||
assert row[1] == 'sam@likesham.com'
|
||||
assert row[2] == '0433000000'
|
||||
// quoted field
|
||||
assert row[3] == 'test quoted field'
|
||||
}
|
||||
}
|
||||
assert row_count == 3
|
||||
}
|
||||
|
||||
fn test_line_break_lf() {
|
||||
lf_data := 'name,email\njoe,joe@blow.com\n'
|
||||
mut csv_reader := csv.new_reader(lf_data)
|
||||
|
|
Loading…
Reference in New Issue