From 56ab85a187273691a948e53165a3001f6074a2b8 Mon Sep 17 00:00:00 2001 From: PATRICK GEBERT Date: Mon, 22 May 2023 11:58:39 +0200 Subject: [PATCH 1/2] Skip line terminator for empty rows. --- .../doyaaaaaken/kotlincsv/client/CsvFileWriter.kt | 5 +++-- .../doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt b/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt index 95dfd58..e96abcb 100644 --- a/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt +++ b/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt @@ -67,8 +67,9 @@ class CsvFileWriter internal constructor( val itr = rows.iterator() while (itr.hasNext()) { - writeNext(itr.next()) - if (itr.hasNext()) writeTerminator() + val row = itr.next() + writeNext(row) + if (itr.hasNext() && row.isNotEmpty()) writeTerminator() } willWriteEndTerminator() diff --git a/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt b/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt index 258eda4..48d6a78 100644 --- a/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt +++ b/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt @@ -98,6 +98,15 @@ class CsvFileWriterTest : WordSpec({ val actual = readTestFile() actual shouldBe expected } + "write no line terminator when row is empty" { + val rows = listOf(listOf("a", "b", "c"), listOf(), listOf("d", "e", "f")).asSequence() + val expected = "a,b,c\r\nd,e,f\r\n" + csvWriter().open(testFileName) { + writeRows(rows) + } + val actual = readTestFile() + actual shouldBe expected + } } "close method" should { "throw Exception when stream is already closed" { @@ -197,4 +206,4 @@ class CsvFileWriterTest : WordSpec({ } } -}) \ No newline at end of file +}) From cb96e8126b63590e9f9f21f7cc68bea245b6a8db Mon Sep 17 00:00:00 2001 From: PATRICK GEBERT Date: Mon, 22 May 2023 12:03:08 +0200 Subject: [PATCH 2/2] Skip line terminator for empty rows. --- .../doyaaaaaken/kotlincsv/client/CsvFileWriter.kt | 2 +- .../doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt b/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt index e96abcb..eb92589 100644 --- a/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt +++ b/src/jvmMain/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriter.kt @@ -49,7 +49,7 @@ class CsvFileWriter internal constructor( willWritePreTerminator() rows.forEachIndexed { index, list -> writeNext(list) - if (index < rows.size - 1) { + if (index < rows.size - 1 && list.isNotEmpty()) { writeTerminator() } } diff --git a/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt b/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt index 48d6a78..4021679 100644 --- a/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt +++ b/src/jvmTest/kotlin/com/github/doyaaaaaken/kotlincsv/client/CsvFileWriterTest.kt @@ -98,7 +98,16 @@ class CsvFileWriterTest : WordSpec({ val actual = readTestFile() actual shouldBe expected } - "write no line terminator when row is empty" { + "write no line terminator when row is empty for rows from list" { + val rows = listOf(listOf("a", "b", "c"), listOf(), listOf("d", "e", "f")) + val expected = "a,b,c\r\nd,e,f\r\n" + csvWriter().open(testFileName) { + writeRows(rows) + } + val actual = readTestFile() + actual shouldBe expected + } + "write no line terminator when row is empty for rows from sequence" { val rows = listOf(listOf("a", "b", "c"), listOf(), listOf("d", "e", "f")).asSequence() val expected = "a,b,c\r\nd,e,f\r\n" csvWriter().open(testFileName) {