Skip to content

Commit b5073de

Browse files
Automated commit of generated code
1 parent 569ef70 commit b5073de

File tree

2 files changed

+36
-1
lines changed
  • core/generated-sources/src
    • main/kotlin/org/jetbrains/kotlinx/dataframe/io
    • test/kotlin/org/jetbrains/kotlinx/dataframe/io

2 files changed

+36
-1
lines changed

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ public fun DataFrame.Companion.readDelim(
345345
}
346346

347347
val columnNames = csvParser.headerNames.takeIf { it.isNotEmpty() }
348-
?: (1..records[0].count()).map { index -> "X$index" }
348+
?: (1..(records.firstOrNull()?.count() ?: 0)).map { index -> "X$index" }
349349

350350
val generator = ColumnNameGenerator()
351351
val uniqueNames = columnNames.map { generator.addUnique(it) }

core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/CsvTests.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
1313
import org.jetbrains.kotlinx.dataframe.api.group
1414
import org.jetbrains.kotlinx.dataframe.api.groupBy
1515
import org.jetbrains.kotlinx.dataframe.api.into
16+
import org.jetbrains.kotlinx.dataframe.api.isEmpty
1617
import org.jetbrains.kotlinx.dataframe.api.schema
1718
import org.jetbrains.kotlinx.dataframe.api.toStr
1819
import org.jetbrains.kotlinx.dataframe.ncol
@@ -282,6 +283,40 @@ class CsvTests {
282283
df.columnNames() shouldBe listOf("Column1", "Column2")
283284
}
284285

286+
@Test
287+
fun `read empty delimStr or CSV`() {
288+
val emptyDelimStr = DataFrame.readDelimStr("")
289+
emptyDelimStr shouldBe DataFrame.empty()
290+
291+
val emptyDelimFile = DataFrame.readDelim(File.createTempFile("empty", "csv").reader())
292+
emptyDelimFile shouldBe DataFrame.empty()
293+
294+
val emptyCsvFile = DataFrame.readCSV(File.createTempFile("empty", "csv"))
295+
emptyCsvFile shouldBe DataFrame.empty()
296+
297+
val emptyCsvFileManualHeader = DataFrame.readCSV(
298+
file = File.createTempFile("empty", "csv"),
299+
header = listOf("a", "b", "c"),
300+
)
301+
emptyCsvFileManualHeader.apply {
302+
isEmpty() shouldBe true
303+
columnNames() shouldBe listOf("a", "b", "c")
304+
columnTypes() shouldBe listOf(typeOf<String>(), typeOf<String>(), typeOf<String>())
305+
}
306+
307+
val emptyCsvFileWithHeader = DataFrame.readCSV(
308+
file = File.createTempFile("empty", "csv").also { it.writeText("a,b,c") },
309+
)
310+
emptyCsvFileWithHeader.apply {
311+
isEmpty() shouldBe true
312+
columnNames() shouldBe listOf("a", "b", "c")
313+
columnTypes() shouldBe listOf(typeOf<String>(), typeOf<String>(), typeOf<String>())
314+
}
315+
316+
val emptyTsvStr = DataFrame.readTSV(File.createTempFile("empty", "tsv"))
317+
emptyTsvStr shouldBe DataFrame.empty()
318+
}
319+
285320
companion object {
286321
private val simpleCsv = testCsv("testCSV")
287322
private val csvWithFrenchLocale = testCsv("testCSVwithFrenchLocale")

0 commit comments

Comments
 (0)