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 } |