diff --git a/lib/pure/parsecsv.nim b/lib/pure/parsecsv.nim index c7bf0c9c11..90025ff064 100644 --- a/lib/pure/parsecsv.nim +++ b/lib/pure/parsecsv.nim @@ -132,6 +132,9 @@ proc open*(self: var CsvParser, input: Stream, filename: string, strm.close() lexbase.open(self, input) + self.row.setLen(0) + self.headers.setLen(0) + self.currRow = 0 self.filename = filename self.sep = separator self.quote = quote diff --git a/tests/stdlib/tparsecsv.nim b/tests/stdlib/tparsecsv.nim index 5a1e41bce9..73a1eef6d3 100644 --- a/tests/stdlib/tparsecsv.nim +++ b/tests/stdlib/tparsecsv.nim @@ -34,3 +34,24 @@ block: # Tests for reading the header row # Tidy up removeFile("temp.csv") + +block: # Reopening a parser resets its state + var p: CsvParser + + var first = newStringStream("A,B\n1,2\n") + p.open(first, "first.csv") + p.readHeaderRow() + doAssert p.readRow() + doAssert p.processedRows() == 2 + p.close() + first.close() + + var second = newStringStream("") + p.open(second, "second.csv") + doAssert p.processedRows() == 0 + doAssert p.row.len == 0 + doAssert p.headers.len == 0 + p.readHeaderRow() + doAssert p.headers.len == 0 + p.close() + second.close()