diff -r 3a70d40db0fd -r 7461111ce9ed shared/net/tz/spss/SpssValue.scala --- /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 + } +}