--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/shared/net/tz/spss/SpssValue.scala Thu Mar 14 15:06:13 2019 +0100
@@ -0,0 +1,33 @@
+package net.tz.spss
+
+import com.bedatadriven.spss.SpssDataFileReader
+
+sealed trait SpssValue
+
+sealed trait Missing extends SpssValue
+
+abstract class Value[T] extends SpssValue {
+ def v: T
+}
+
+abstract class MissingValue[T] extends Value[T]
+
+case class StringValue(v: String) extends Value[String]
+case class DoubleValue(v: Double) extends Value[Double]
+case object SystemMissing extends Missing
+// ??? case class MissingString(v: String) extends MissingValue[String]
+case class MissingDouble(v: Double) extends MissingValue[Double]
+
+object SpssValue {
+
+ def apply(r: SpssDataFileReader, variable: SpssVariable): SpssValue = {
+ val i = variable.index
+ if (r.isSystemMissing(i))
+ SystemMissing
+ else
+ Option(r.getDoubleValue(i)) map(x =>
+ if (r.isValueMissing(i, x)) MissingDouble(x) else DoubleValue(x)
+ ) orElse (Option(r.getStringValue(i)) map StringValue
+ ) getOrElse SystemMissing
+ }
+}