| author | Tomas Zeman <tomas@functionals.cz> |
| Tue, 21 Jul 2020 17:16:53 +0200 | |
| changeset 9 | 0bcde61ea869 |
| parent 5 | 44aad285dc66 |
| permissions | -rw-r--r-- |
|
2
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
1 |
package net.tz.spss |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
2 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
3 |
import java.io.File |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
4 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
5 |
import com.bedatadriven.spss.SpssDataFileReader |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
6 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
7 |
import scala.collection.JavaConverters._ |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
8 |
import scala.language.postfixOps |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
9 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
10 |
class SpssReader(private val r: SpssDataFileReader) |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
11 |
extends Iterator[Map[SpssVariable, SpssValue]] {
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
12 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
13 |
lazy val variables: List[SpssVariable] = |
| 5 | 14 |
r.getVariables.asScala.toList map spssVarJtoS |
|
2
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
15 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
16 |
override def hasNext: Boolean = r.readNextCase() |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
17 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
18 |
override def next(): Map[SpssVariable, SpssValue] = |
| 5 | 19 |
variables map(v => (v, asValue(v))) toMap |
|
2
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
20 |
|
| 5 | 21 |
private def asValue(variable: SpssVariable): SpssValue = {
|
22 |
val i = variable.index |
|
|
9
0bcde61ea869
SpssReader: handle StringValues properly.
Tomas Zeman <tomas@functionals.cz>
parents:
5
diff
changeset
|
23 |
if (r.isSystemMissing(i)) {
|
| 5 | 24 |
SystemMissing |
|
9
0bcde61ea869
SpssReader: handle StringValues properly.
Tomas Zeman <tomas@functionals.cz>
parents:
5
diff
changeset
|
25 |
} else if (variable.isNumeric) {
|
| 5 | 26 |
Option(r.getDoubleValue(i)) map(x => |
27 |
if (r.isValueMissing(i, x)) MissingDouble(x) else DoubleValue(x) |
|
28 |
) getOrElse SystemMissing |
|
|
9
0bcde61ea869
SpssReader: handle StringValues properly.
Tomas Zeman <tomas@functionals.cz>
parents:
5
diff
changeset
|
29 |
} else {
|
|
0bcde61ea869
SpssReader: handle StringValues properly.
Tomas Zeman <tomas@functionals.cz>
parents:
5
diff
changeset
|
30 |
Option(r.getStringValue(i)) map StringValue getOrElse SystemMissing |
|
0bcde61ea869
SpssReader: handle StringValues properly.
Tomas Zeman <tomas@functionals.cz>
parents:
5
diff
changeset
|
31 |
} |
| 5 | 32 |
} |
|
2
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
33 |
} |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
34 |
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
35 |
object SpssReader {
|
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
36 |
def apply(f: File): SpssReader = new SpssReader(new SpssDataFileReader(f)) |
|
7461111ce9ed
Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
37 |
} |