Skip to content

Commit 5f06f5f

Browse files
committed
Add delimiter parameter to readDelimStr
1 parent e2ba236 commit 5f06f5f

File tree

7 files changed

+329
-2
lines changed

7 files changed

+329
-2
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
@@ -249,6 +249,16 @@ class CsvTests {
249249
producedFile.delete()
250250
}
251251

252+
@Test
253+
fun `readDelimStr delimiter`() {
254+
val tsv = """
255+
a b c
256+
1 2 3
257+
""".trimIndent()
258+
val df = DataFrame.readDelimStr(tsv, '\t')
259+
df shouldBe dataFrameOf("a", "b", "c")(1, 2, 3)
260+
}
261+
252262
companion object {
253263
private val simpleCsv = testCsv("testCSV")
254264
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/readDelimStr_delimiter.fir.ir.txt

Lines changed: 230 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
FILE: readDelimStr_delimiter.kt
2+
public final fun box(): R|kotlin/String| {
3+
lval tsv: R|kotlin/String| = String(
4+
a b c
5+
1 2 3
6+
)
7+
lval df: R|org/jetbrains/kotlinx/dataframe/DataFrame<<local>/ReadDelimStr_21>| = Q|org/jetbrains/kotlinx/dataframe/DataFrame|.R|kotlin/let|<R|org/jetbrains/kotlinx/dataframe/DataFrame.Companion|, R|org/jetbrains/kotlinx/dataframe/DataFrame<<local>/ReadDelimStr_21>|>(<L> = fun <anonymous>(it: R|org/jetbrains/kotlinx/dataframe/DataFrame.Companion|): R|org/jetbrains/kotlinx/dataframe/DataFrame<<local>/ReadDelimStr_21>| <inline=Inline, kind=EXACTLY_ONCE> {
8+
local abstract class ReadDelimStr_21I : R|kotlin/Any| {
9+
@R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(2)) public abstract val c: R|kotlin/Int?|
10+
public get(): R|kotlin/Int?|
11+
12+
@R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(1)) public abstract val b: R|kotlin/Int?|
13+
public get(): R|kotlin/Int?|
14+
15+
@R|org/jetbrains/kotlinx/dataframe/annotations/Order|(order = Int(0)) public abstract val a: R|kotlin/Int?|
16+
public get(): R|kotlin/Int?|
17+
18+
public constructor(): R|<local>/ReadDelimStr_21I|
19+
20+
}
21+
22+
local final class Scope0 : R|kotlin/Any| {
23+
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/ReadDelimStr_21I>|.c: R|kotlin/Int?|
24+
public get(): R|kotlin/Int?|
25+
26+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/ReadDelimStr_21I>|.c: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int?>|
27+
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int?>|
28+
29+
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/ReadDelimStr_21I>|.b: R|kotlin/Int?|
30+
public get(): R|kotlin/Int?|
31+
32+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/ReadDelimStr_21I>|.b: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int?>|
33+
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int?>|
34+
35+
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/ReadDelimStr_21I>|.a: R|kotlin/Int?|
36+
public get(): R|kotlin/Int?|
37+
38+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/ReadDelimStr_21I>|.a: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int?>|
39+
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int?>|
40+
41+
public constructor(): R|<local>/Scope0|
42+
43+
}
44+
45+
local abstract class ReadDelimStr_21 : R|<local>/ReadDelimStr_21I| {
46+
public abstract var scope0: R|<local>/Scope0|
47+
public get(): R|<local>/Scope0|
48+
public set(value: R|<local>/Scope0|): R|kotlin/Unit|
49+
50+
public constructor(): R|<local>/ReadDelimStr_21|
51+
52+
}
53+
54+
^ R|<local>/it|.R|org/jetbrains/kotlinx/dataframe/io/readDelimStr|(R|<local>/tsv|, Char(9))
55+
}
56+
)
57+
(this@R|/box|, R|<local>/df|).R|<local>/Scope0.a|
58+
(this@R|/box|, R|<local>/df|).R|<local>/Scope0.b|
59+
(this@R|/box|, R|<local>/df|).R|<local>/Scope0.c|
60+
^box String(OK)
61+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import org.jetbrains.kotlinx.dataframe.api.*
2+
import org.jetbrains.kotlinx.dataframe.io.*
3+
import org.jetbrains.kotlinx.dataframe.*
4+
5+
fun box(): String {
6+
val tsv = """
7+
a b c
8+
1 2 3
9+
"""
10+
val df = DataFrame.readDelimStr(tsv, '\t')
11+
df.a
12+
df.b
13+
df.c
14+
return "OK"
15+
}

plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,12 @@ public void testReadCSV() {
225225
runTest("testData/box/readCSV.kt");
226226
}
227227

228+
@Test
229+
@TestMetadata("readDelimStr_delimiter.kt")
230+
public void testReadDelimStr_delimiter() {
231+
runTest("testData/box/readDelimStr_delimiter.kt");
232+
}
233+
228234
@Test
229235
@TestMetadata("readJson.kt")
230236
public void testReadJson() {

0 commit comments

Comments
 (0)