csv: fix last-field-empty error
parent
3e4cd12fd0
commit
b2a076e8b8
|
@ -129,18 +129,19 @@ fn (r mut Reader) read_record() ?[]string {
|
||||||
// quoted
|
// quoted
|
||||||
else {
|
else {
|
||||||
line = line[1..]
|
line = line[1..]
|
||||||
if j := line.index('"') {
|
j := line.index('"') or {
|
||||||
if j+1 == line.len {
|
break
|
||||||
// last record
|
}
|
||||||
fields << line[..j]
|
if j+1 == line.len {
|
||||||
break
|
// last record
|
||||||
}
|
fields << line[..j]
|
||||||
next := line[j+1]
|
break
|
||||||
if next == r.delimiter {
|
}
|
||||||
fields << line[..j]
|
next := line[j+1]
|
||||||
line = line[j..]
|
if next == r.delimiter {
|
||||||
continue
|
fields << line[..j]
|
||||||
}
|
line = line[j..]
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
line = line[1..]
|
line = line[1..]
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,3 +120,30 @@ fn test_no_line_ending() {
|
||||||
|
|
||||||
assert row_count == 2
|
assert row_count == 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_last_field_empty() {
|
||||||
|
data := '"name","description","value"\n"one","first","1"\n"two","second",\n'
|
||||||
|
mut csv_reader := csv.new_reader(data)
|
||||||
|
|
||||||
|
mut row_count := 0
|
||||||
|
for {
|
||||||
|
row := csv_reader.read() or {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
row_count++
|
||||||
|
if row_count == 1 {
|
||||||
|
assert row[0] == 'name'
|
||||||
|
assert row[1] == 'description'
|
||||||
|
assert row[2] == 'value'
|
||||||
|
}
|
||||||
|
if row_count == 2 {
|
||||||
|
assert row[0] == 'one'
|
||||||
|
assert row[1] == 'first'
|
||||||
|
assert row[2] == '1'
|
||||||
|
}
|
||||||
|
if row_count == 3 {
|
||||||
|
assert row[0] == 'two'
|
||||||
|
assert row[1] == 'second'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue