Skip to content

Commit 490eaed

Browse files
committed
Add delimiter parameter to readDelimStr
1 parent 9507df5 commit 490eaed

File tree

9 files changed

+331
-4
lines changed

9 files changed

+331
-4
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,15 @@ internal fun isCompressed(url: URL) = isCompressed(url.path)
7373
@Interpretable("ReadDelimStr")
7474
public fun DataFrame.Companion.readDelimStr(
7575
text: String,
76+
delimiter: Char = ',',
7677
colTypes: Map<String, ColType> = mapOf(),
7778
skipLines: Int = 0,
7879
readLines: Int? = null,
7980
): DataFrame<*> =
80-
StringReader(text).use { readDelim(it, CSVType.DEFAULT.format.builder().setHeader().build(), colTypes, skipLines, readLines) }
81+
StringReader(text).use {
82+
val format = CSVType.DEFAULT.format.builder().setHeader().setDelimiter(delimiter).build()
83+
readDelim(it, format, colTypes, skipLines, readLines)
84+
}
8185

8286
public fun DataFrame.Companion.read(
8387
fileOrUrl: String,

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,16 @@ class CsvTests {
258258
df shouldBe DataFrame.readCSV("../data/jetbrains repositories.csv")
259259
}
260260

261+
@Test
262+
fun `readDelimStr delimiter`() {
263+
val tsv = """
264+
a b c
265+
1 2 3
266+
""".trimIndent()
267+
val df = DataFrame.readDelimStr(tsv, '\t')
268+
df shouldBe dataFrameOf("a", "b", "c")(1, 2, 3)
269+
}
270+
261271
companion object {
262272
private val simpleCsv = testCsv("testCSV")
263273
private val csvWithFrenchLocale = testCsv("testCSVwithFrenchLocale")

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/read.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,10 @@ private fun resolveFile(resolutionPath: String?, path: String): File? {
9090

9191
internal class ReadDelimStr : AbstractInterpreter<PluginDataFrameSchema>() {
9292
val Arguments.text: String by arg()
93+
val Arguments.delimiter: Char by arg(defaultValue = Present(','))
9394

9495
override fun Arguments.interpret(): PluginDataFrameSchema {
95-
return DataFrame.readDelimStr(text).schema().toPluginDataFrameSchema()
96+
return DataFrame.readDelimStr(text, delimiter).schema().toPluginDataFrameSchema()
9697
}
9798
}
9899

plugins/kotlin-dataframe/testData/box/diff.fir.ir.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ FILE fqName:org.jetbrains.kotlinx.dataframe fileName:/diff.kt
4949
FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
5050
BLOCK_BODY
5151
VAR name:df type:org.jetbrains.kotlinx.dataframe.DataFrame<*> [val]
52-
CALL 'public final fun readDelimStr (text: kotlin.String, colTypes: kotlin.collections.Map<kotlin.String, org.jetbrains.kotlinx.dataframe.io.ColType>, skipLines: kotlin.Int, readLines: kotlin.Int?): org.jetbrains.kotlinx.dataframe.DataFrame<*> declared in org.jetbrains.kotlinx.dataframe.io' type=org.jetbrains.kotlinx.dataframe.DataFrame<*> origin=null
52+
CALL 'public final fun readDelimStr (text: kotlin.String, delimiter: kotlin.Char, colTypes: kotlin.collections.Map<kotlin.String, org.jetbrains.kotlinx.dataframe.io.ColType>, skipLines: kotlin.Int, readLines: kotlin.Int?): org.jetbrains.kotlinx.dataframe.DataFrame<*> declared in org.jetbrains.kotlinx.dataframe.io' type=org.jetbrains.kotlinx.dataframe.DataFrame<*> origin=null
5353
$receiver: GET_OBJECT 'CLASS OBJECT name:Companion modality:FINAL visibility:public [companion] superTypes:[kotlin.Any]' type=org.jetbrains.kotlinx.dataframe.DataFrame.Companion
5454
text: CALL 'public final fun trimIndent (): kotlin.String declared in kotlin.text' type=kotlin.String origin=null
5555
$receiver: CONST String type=kotlin.String value="\n char,level,race,charclass,zone,guild,timestamp\n 59425,1,Orc,Rogue,Orgrimmar,165,01/01/08 00:02:04\n 65494,9,Orc,Hunter,Durotar,-1,01/01/08 00:02:04\n "

plugins/kotlin-dataframe/testData/box/flexibleReturnType.fir.ir.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ FILE fqName:org.jetbrains.kotlinx.dataframe fileName:/flexibleReturnType.kt
2727
FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
2828
BLOCK_BODY
2929
VAR name:df type:org.jetbrains.kotlinx.dataframe.DataFrame<*> [val]
30-
CALL 'public final fun readDelimStr (text: kotlin.String, colTypes: kotlin.collections.Map<kotlin.String, org.jetbrains.kotlinx.dataframe.io.ColType>, skipLines: kotlin.Int, readLines: kotlin.Int?): org.jetbrains.kotlinx.dataframe.DataFrame<*> declared in org.jetbrains.kotlinx.dataframe.io' type=org.jetbrains.kotlinx.dataframe.DataFrame<*> origin=null
30+
CALL 'public final fun readDelimStr (text: kotlin.String, delimiter: kotlin.Char, colTypes: kotlin.collections.Map<kotlin.String, org.jetbrains.kotlinx.dataframe.io.ColType>, skipLines: kotlin.Int, readLines: kotlin.Int?): org.jetbrains.kotlinx.dataframe.DataFrame<*> declared in org.jetbrains.kotlinx.dataframe.io' type=org.jetbrains.kotlinx.dataframe.DataFrame<*> origin=null
3131
$receiver: GET_OBJECT 'CLASS OBJECT name:Companion modality:FINAL visibility:public [companion] superTypes:[kotlin.Any]' type=org.jetbrains.kotlinx.dataframe.DataFrame.Companion
3232
text: CALL 'public final fun trimIndent (): kotlin.String declared in kotlin.text' type=kotlin.String origin=null
3333
$receiver: CONST String type=kotlin.String value="\n char,level,race,charclass,zone,guild,timestamp\n 59425,1,Orc,Rogue,Orgrimmar,165,01/01/08 00:02:04\n 65494,9,Orc,Hunter,Durotar,-1,01/01/08 00:02:04\n "

0 commit comments

Comments
 (0)