jvm/src/net/tz/spss/SpssReader.scala
changeset 5 44aad285dc66
parent 2 7461111ce9ed
child 9 0bcde61ea869
--- a/jvm/src/net/tz/spss/SpssReader.scala	Thu Sep 19 12:49:03 2019 +0200
+++ b/jvm/src/net/tz/spss/SpssReader.scala	Thu Sep 19 13:00:31 2019 +0200
@@ -11,13 +11,23 @@
   extends Iterator[Map[SpssVariable, SpssValue]] {
 
   lazy val variables: List[SpssVariable] =
-    r.getVariables.asScala.toList map(SpssVariable(_))
+    r.getVariables.asScala.toList map spssVarJtoS
 
   override def hasNext: Boolean = r.readNextCase()
 
   override def next(): Map[SpssVariable, SpssValue] =
-    variables map(v => (v, SpssValue(r, v))) toMap
+    variables map(v => (v, asValue(v))) toMap
 
+  private def asValue(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
+  }
 }
 
 object SpssReader {