Skip to content

Commit

Permalink
encoding.csv: allow passing a custom delimiter to the new_reader fu…
Browse files Browse the repository at this point in the history
…nction (#13910)
  • Loading branch information
StunxFS committed Apr 3, 2022
1 parent 782d537 commit 3885356
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
15 changes: 11 additions & 4 deletions vlib/encoding/csv/reader.v
Expand Up @@ -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
}
}

Expand Down
28 changes: 28 additions & 0 deletions vlib/encoding/csv/reader_test.v
Expand Up @@ -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)
Expand Down

0 comments on commit 3885356

Please sign in to comment.