Skip to content

Commit d0aacfc

Browse files
committed
CellConversionException in DataColumn<String?>.convertToDouble(locale)
1 parent 827509b commit d0aacfc

File tree

1 file changed

+16
-3
lines changed
  • core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api

1 file changed

+16
-3
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.jetbrains.kotlinx.dataframe.RowValueExpression
1616
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
1717
import org.jetbrains.kotlinx.dataframe.dataTypes.IFRAME
1818
import org.jetbrains.kotlinx.dataframe.dataTypes.IMG
19+
import org.jetbrains.kotlinx.dataframe.exceptions.CellConversionException
1920
import org.jetbrains.kotlinx.dataframe.exceptions.TypeConversionException
2021
import org.jetbrains.kotlinx.dataframe.impl.api.Parsers
2122
import org.jetbrains.kotlinx.dataframe.impl.api.convertRowColumnImpl
@@ -151,16 +152,28 @@ public fun DataColumn<String>.convertToDouble(locale: Locale? = null): DataColum
151152
*/
152153
@JvmName("convertToDoubleFromStringNullable")
153154
public fun DataColumn<String?>.convertToDouble(locale: Locale? = null): DataColumn<Double?> {
155+
fun applyParser(parser: (String) -> Double?): DataColumn<Double?> {
156+
var currentRow = 0
157+
try {
158+
return mapIndexed { row, value ->
159+
currentRow = row
160+
value?.let { parser(value.trim()) ?: throw TypeConversionException(value, typeOf<String>(), typeOf<Double>()) }
161+
}
162+
} catch (e: TypeConversionException) {
163+
throw CellConversionException(e.value, e.from, e.to, this.name(), currentRow, e)
164+
}
165+
}
166+
154167
if (locale != null) {
155168
val explicitParser = Parsers.getDoubleParser(locale)
156-
return map { it?.let { explicitParser(it.trim()) ?: throw TypeConversionException(it, typeOf<String>(), typeOf<Double>()) } }
169+
return applyParser(explicitParser)
157170
} else {
158171
return try {
159172
val defaultParser = Parsers.getDoubleParser()
160-
map { it?.let { defaultParser(it.trim()) ?: throw TypeConversionException(it, typeOf<String>(), typeOf<Double>()) } }
173+
applyParser(defaultParser)
161174
} catch (e: TypeConversionException) {
162175
val posixParser = Parsers.getDoubleParser(Locale.forLanguageTag("C.UTF-8"))
163-
map { it?.let { posixParser(it.trim()) ?: throw TypeConversionException(it, typeOf<String>(), typeOf<Double>()) } }
176+
applyParser(posixParser)
164177
}
165178
}
166179
}

0 commit comments

Comments
 (0)