diff --git a/src/commonMain/kotlin/parseCsv.kt b/src/commonMain/kotlin/parseCsv.kt index 5cb5040..b643935 100644 --- a/src/commonMain/kotlin/parseCsv.kt +++ b/src/commonMain/kotlin/parseCsv.kt @@ -43,6 +43,15 @@ internal fun parseCsv( completeValue() BeforeValue } + '\r' -> { + if (nextChar() == '\n') { + pos++ + } + if (row.isNotEmpty()) { + completeRow() + } + BeforeValue + } '\n' -> { if (row.isNotEmpty()) { completeRow() diff --git a/src/commonTest/kotlin/CsvTest.kt b/src/commonTest/kotlin/CsvTest.kt index 696e772..dec499f 100644 --- a/src/commonTest/kotlin/CsvTest.kt +++ b/src/commonTest/kotlin/CsvTest.kt @@ -72,6 +72,39 @@ class CsvTest { println(csv.toCsvText()) assertEquals(3, csv.allRows.size) + val columnCount = header.size + assertEquals(3, columnCount) + + val nameIndex = header.indexOf("NAME") + assertEquals(0, nameIndex) + + val codeIndex = header.indexOf("CODE") + assertEquals(1, codeIndex) + + val descriptionIndex = header.indexOf("DESCRIPTION") + assertEquals(2, descriptionIndex) + } + + @Test + fun parseQuotedHeaderWhenNewLineIsRN() { + + val givenCsvString = + """ + "NAME","CODE","DESCRIPTION" + "BURGUNDY PINK","4PK.GD-S7","Pink burgundy" + "HILLS PINK","BVH.5-NAR.S8","Pink hills" + """.trimIndent() + .replace("\n", "\r\n") + + val csv = CsvWithHeader.fromCsvText(givenCsvString) as CsvWithHeader + val header = csv.allRows[0] + + println(csv.toCsvText()) + assertEquals(3, csv.allRows.size) + + val columnCount = header.size + assertEquals(3, columnCount) + val nameIndex = header.indexOf("NAME") assertEquals(0, nameIndex)