jvm/src/net/tz/spss/SpssReader.scala
changeset 5 44aad285dc66
parent 2 7461111ce9ed
child 9 0bcde61ea869
equal deleted inserted replaced
4:dbc63b7c43ce 5:44aad285dc66
     9 
     9 
    10 class SpssReader(private val r: SpssDataFileReader)
    10 class SpssReader(private val r: SpssDataFileReader)
    11   extends Iterator[Map[SpssVariable, SpssValue]] {
    11   extends Iterator[Map[SpssVariable, SpssValue]] {
    12 
    12 
    13   lazy val variables: List[SpssVariable] =
    13   lazy val variables: List[SpssVariable] =
    14     r.getVariables.asScala.toList map(SpssVariable(_))
    14     r.getVariables.asScala.toList map spssVarJtoS
    15 
    15 
    16   override def hasNext: Boolean = r.readNextCase()
    16   override def hasNext: Boolean = r.readNextCase()
    17 
    17 
    18   override def next(): Map[SpssVariable, SpssValue] =
    18   override def next(): Map[SpssVariable, SpssValue] =
    19     variables map(v => (v, SpssValue(r, v))) toMap
    19     variables map(v => (v, asValue(v))) toMap
    20 
    20 
       
    21   private def asValue(variable: SpssVariable): SpssValue = {
       
    22     val i = variable.index
       
    23     if (r.isSystemMissing(i))
       
    24       SystemMissing
       
    25     else
       
    26       Option(r.getDoubleValue(i)) map(x =>
       
    27         if (r.isValueMissing(i, x)) MissingDouble(x) else DoubleValue(x)
       
    28         ) orElse (Option(r.getStringValue(i)) map StringValue
       
    29         ) getOrElse SystemMissing
       
    30   }
    21 }
    31 }
    22 
    32 
    23 object SpssReader {
    33 object SpssReader {
    24   def apply(f: File): SpssReader = new SpssReader(new SpssDataFileReader(f))
    34   def apply(f: File): SpssReader = new SpssReader(new SpssDataFileReader(f))
    25 }
    35 }