diff --git a/vlib/encoding/csv/csv_reader_eol_test.v b/vlib/encoding/csv/csv_reader_eol_test.v new file mode 100644 index 0000000000..2f0b59793c --- /dev/null +++ b/vlib/encoding/csv/csv_reader_eol_test.v @@ -0,0 +1,34 @@ +import encoding.csv + +fn test_no_ending() { + data := 'x,y,d +a,b +w' + mut parser := csv.new_reader(data) + mut arr := []string{} + for { + items := parser.read() or { break } + arr << items.join('-') + } + dump(arr) + assert arr[0].str() == 'x-y-d' + assert arr[1].str() == 'a-b' + assert arr[2].str() == 'w' +} + +fn test_with_ending() { + data := 'x,y,d +a,b +w +' + mut parser := csv.new_reader(data) + mut arr := []string{} + for { + items := parser.read() or { break } + arr << items.join('-') + } + dump(arr) + assert arr[0].str() == 'x-y-d' + assert arr[1].str() == 'a-b' + assert arr[2].str() == 'w' +} diff --git a/vlib/encoding/csv/reader.v b/vlib/encoding/csv/reader.v index c61669bbf9..f9e78a2b27 100644 --- a/vlib/encoding/csv/reader.v +++ b/vlib/encoding/csv/reader.v @@ -91,7 +91,7 @@ pub fn (mut r Reader) read() ![]string { // } fn (mut r Reader) read_line() !string { // last record - if r.row_pos == r.data.len { + if r.row_pos >= r.data.len { return &EndOfFileError{} } le := if r.is_mac_pre_osx_le { '\r' } else { '\n' } @@ -108,7 +108,7 @@ fn (mut r Reader) read_line() !string { } } else { // No line ending on file - i = r.data.len - 1 + i = r.data.len } } mut line := r.data[r.row_pos..i]