@@ -7,11 +7,17 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractInterpreter
7
7
import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments
8
8
import org.jetbrains.kotlinx.dataframe.plugin.impl.Present
9
9
import org.jetbrains.kotlinx.dataframe.api.schema
10
+ import org.jetbrains.kotlinx.dataframe.io.JSON
11
+ import org.jetbrains.kotlinx.dataframe.io.JSON.TypeClashTactic.ARRAY_AND_VALUE_COLUMNS
12
+ import org.jetbrains.kotlinx.dataframe.io.NameRepairStrategy
13
+ import org.jetbrains.kotlinx.dataframe.io.StringColumns
10
14
import org.jetbrains.kotlinx.dataframe.io.read
11
15
import org.jetbrains.kotlinx.dataframe.io.readCSV
12
16
import org.jetbrains.kotlinx.dataframe.io.readDelimStr
17
+ import org.jetbrains.kotlinx.dataframe.io.readExcel
13
18
import org.jetbrains.kotlinx.dataframe.io.readJson
14
19
import org.jetbrains.kotlinx.dataframe.io.readJsonStr
20
+ import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter
15
21
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
16
22
import org.jetbrains.kotlinx.dataframe.plugin.impl.data.IoSchema
17
23
import org.jetbrains.kotlinx.dataframe.plugin.impl.data.deserializeToPluginDataFrameSchema
@@ -30,13 +36,17 @@ internal class Read0 : AbstractInterpreter<PluginDataFrameSchema>() {
30
36
31
37
internal class ReadCSV0 : AbstractInterpreter <PluginDataFrameSchema >() {
32
38
val Arguments .fileOrUrl: String by arg()
39
+ val Arguments .delimiter: Char by arg(defaultValue = Present (' ,' ))
40
+ val Arguments .skipLines: Int by arg(defaultValue = Present (0 ))
41
+ val Arguments .readLines: Int? by arg(defaultValue = Present (null ))
42
+ val Arguments .duplicate: Boolean by arg(defaultValue = Present (true ))
33
43
34
44
override fun Arguments.interpret (): PluginDataFrameSchema {
35
45
val file = resolveFile(resolutionPath, fileOrUrl)
36
46
val df = if (file != null && file.exists()) {
37
- DataFrame .readCSV(file)
47
+ DataFrame .readCSV(file, delimiter, skipLines = skipLines, readLines = readLines, duplicate = duplicate )
38
48
} else {
39
- DataFrame .readCSV(fileOrUrl)
49
+ DataFrame .readCSV(fileOrUrl, delimiter, skipLines = skipLines, readLines = readLines, duplicate = duplicate )
40
50
}
41
51
return df.schema().toPluginDataFrameSchema()
42
52
}
@@ -91,17 +101,42 @@ private fun resolveFile(resolutionPath: String?, path: String): File? {
91
101
internal class ReadDelimStr : AbstractInterpreter <PluginDataFrameSchema >() {
92
102
val Arguments .text: String by arg()
93
103
val Arguments .delimiter: Char by arg(defaultValue = Present (' ,' ))
104
+ val Arguments .skipLines: Int by arg(defaultValue = Present (0 ))
105
+ val Arguments .readLines: Int? by arg(defaultValue = Present (null ))
94
106
95
107
override fun Arguments.interpret (): PluginDataFrameSchema {
96
- return DataFrame .readDelimStr(text, delimiter).schema().toPluginDataFrameSchema()
108
+ return DataFrame .readDelimStr(text, delimiter, skipLines = skipLines, readLines = readLines ).schema().toPluginDataFrameSchema()
97
109
}
98
110
}
99
111
100
112
internal class ReadJsonStr : AbstractInterpreter <PluginDataFrameSchema >() {
101
113
val Arguments .text: String by arg()
114
+ val Arguments .typeClashTactic: JSON .TypeClashTactic by arg(defaultValue = Present (ARRAY_AND_VALUE_COLUMNS ))
102
115
103
116
override fun Arguments.interpret (): PluginDataFrameSchema {
104
- return DataFrame .readJsonStr(text).schema().toPluginDataFrameSchema()
117
+ return DataFrame .readJsonStr(text, typeClashTactic = typeClashTactic ).schema().toPluginDataFrameSchema()
105
118
}
106
119
}
107
120
121
+ internal class ReadExcel : AbstractSchemaModificationInterpreter () {
122
+ val Arguments .fileOrUrl: String by arg()
123
+ val Arguments .sheetName: String? by arg(defaultValue = Present (null ))
124
+ val Arguments .skipRows: Int by arg(defaultValue = Present (0 ))
125
+ val Arguments .columns: String? by arg(defaultValue = Present (null ))
126
+ val Arguments .stringColumns: StringColumns ? by arg(defaultValue = Present (null ))
127
+ val Arguments .rowsCount: Int? by arg(defaultValue = Present (null ))
128
+ val Arguments .nameRepairStrategy: NameRepairStrategy by arg(defaultValue = Present (NameRepairStrategy .CHECK_UNIQUE ))
129
+
130
+ override fun Arguments.interpret (): PluginDataFrameSchema {
131
+ val df = DataFrame .readExcel(fileOrUrl, sheetName, skipRows, columns, stringColumns, rowsCount, nameRepairStrategy)
132
+ return df.schema().toPluginDataFrameSchema()
133
+ }
134
+ }
135
+
136
+ internal class StringColumnsConstructor : AbstractInterpreter <StringColumns >() {
137
+ val Arguments .range: String by arg()
138
+
139
+ override fun Arguments.interpret (): StringColumns {
140
+ return StringColumns (range)
141
+ }
142
+ }
0 commit comments