读取 spss 文件 java

Reading the spss file java

  SPSSReader reader = new SPSSReader(args[0], null);
            Iterator it = reader.getVariables().iterator();
            while (it.hasNext())
             {
                System.out.println(it.next());
            }

我正在使用这个 SPSSReader 来读取 spss 文件。在这里,每个字符串都打印有一些附加的垃圾字符。

获得的结果:

StringVariable: nameogr(nulltpc{)(10)
NumericVariable: weightppuo(nullf{nd)
DateVariable: datexsgzj(nulllanck)
DateVariable: timeppzb(null|wt{l)
DateVariable: datetimegulj{(null|ns)
NumericVariable: commissionyrqh(nullohzx)
NumericVariable: priceeub{av(nullvlpl)

预期结果:

 StringVariable: name (10)
 NumericVariable: weight
 DateVariable: date
 DateVariable: time
 DateVariable: datetime
 NumericVariable: commission
 NumericVariable: price

提前致谢:)

我不确定,但查看您的代码,it.next() 正在返回一个 Variable 对象。

必须有一些方法链接到 Variable 对象,例如 it.next().getLabel()it.next().getVariableName()toString() 在对象上并不总是有意义的。检查 SPSSReader 库中 Variable class 的 toString() 方法。

我尝试重新创建问题并发现了同样的事情。
考虑到该库有许可(参见 here), I would assume that this might be a way of the developers to ensure that a license is bought as the regular download only contains a demo version as evaluation (see licensing before the download)。

因为那个库比较旧(网站的版权是 2003-2008,对库的要求是 Java 1.2,没有泛型,使用 Vectors 等等),我会推荐一个不同的库作为只要您不限于问题中使用的那个。

快速搜索了一下,原来有一个开源的spss reader here which is also available through Maven here.

使用 github 页面上的示例,我将其放在一起:

import com.bedatadriven.spss.SpssDataFileReader;
import com.bedatadriven.spss.SpssVariable;

public class SPSSDemo {

    public static void main(String[] args) {
        try {
            SpssDataFileReader reader = new SpssDataFileReader(args[0]);

            for (SpssVariable var : reader.getVariables()) {
                System.out.println(var.getVariableName());
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

我找不到可以打印 NumericVariable 或类似内容的内容,但由于这些是您在问题中使用的库的类名,我假设这些不是 SPSS 标准化的。如果是,您将在库中找到类似的东西,或者您可以在 github 页面上打开一个问题。

使用 here 中的 employees.sav 文件,我使用开源库从上面的代码中得到了这个输出:

resp_id
gender
first_name
last_name
date_of_birth
education_type
education_years
job_type
experience_years
monthly_income
job_satisfaction

没有更多的字符了!

编辑 关于评论:

没错。我通读了一些 SPSS 的东西,据我了解,只有字符串和数字变量,然后以不同的方式格式化。在 maven 中发布的版本只允许您访问变量的类型代码(老实说,不知道那是什么)但是 github 版本(not 似乎不幸的是,在 maven 上发布为 1.3-SNAPSHOT)在引入 write- 和 printformat 之后。

您可以克隆或下载库和 运行 mvn clean package(假设您安装了 maven)并在您的项目中使用生成的库(在 target\spss-reader-1.3-SNAPSHOT.jar 下找到)以获得方法 SpssVariable#getPrintFormatSpssVariable#getWriteFormat 可用。

那些 return 和 SpssVariableFormat 您可以从中获得更多信息。由于我不知道这一切是怎么回事,我能做的最好的事情就是 link 你找到 SpssVariableFormat#getType 文档中引用的来源 here where references to the stuff that was implemented there should help you further (I assume that this link 可能最有助于确定你那里有什么样的格式。

如果绝对没有任何效果,我想你也可以使用问题中库的演示版本来通过 it.next().getClass().getSimpleName() 来确定内容,但只有在没有其他方法的情况下我才会求助于它确定格式的方法。