summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFederico Ceratto <federico.ceratto@gmail.com>2019-01-26 09:27:08 +0000
committerAndreas Rumpf <rumpf_a@web.de>2019-01-26 10:27:08 +0100
commit68dd9be0f527470a9166d22fff01ae7a4152ca70 (patch)
treee2de8bd80d22e6bd767f91d0e77dd65d2b13559b
parent4d230db5abb630db71001e7f70b8a5bbdf6a3e7e (diff)
downloadNim-68dd9be0f527470a9166d22fff01ae7a4152ca70.tar.gz
Handle empty lines in parsecsv; fixes #8365 (#9343)
-rw-r--r--lib/pure/parsecsv.nim8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/pure/parsecsv.nim b/lib/pure/parsecsv.nim
index 35ed0b377..e0c4f38a4 100644
--- a/lib/pure/parsecsv.nim
+++ b/lib/pure/parsecsv.nim
@@ -255,6 +255,12 @@ proc readRow*(my: var CsvParser, columns = 0): bool =
 
   var col = 0 # current column
   let oldpos = my.bufpos
+  # skip initial empty lines #8365
+  while true:
+    case my.buf[my.bufpos]
+    of '\c': my.bufpos = handleCR(my, my.bufpos)
+    of '\l': my.bufpos = handleLF(my, my.bufpos)
+    else: break
   while my.buf[my.bufpos] != '\0':
     let oldlen = my.row.len
     if oldlen < col+1:
@@ -354,7 +360,7 @@ when isMainModule:
   import os
   import strutils
   block: # Tests for reading the header row
-    let content = "One,Two,Three,Four\n1,2,3,4\n10,20,30,40,\n100,200,300,400\n"
+    let content = "\nOne,Two,Three,Four\n1,2,3,4\n10,20,30,40,\n100,200,300,400\n"
     writeFile("temp.csv", content)
 
     var p: CsvParser