2
  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

提前致谢 :)

4

2 回答 2

2

我尝试重新创建问题并发现同样的事情。
考虑到该库有许可(请参阅此处),我认为这可能是开发人员确保购买许可的一种方式,因为常规下载仅包含作为评估的演示版本(请参阅下载前的许可)。

由于该库相当旧(网站的版权为 2003-2008,对库的要求是 Java 1.2,没有泛型,使用向量等),只要您不限于一个,我会推荐一个不同的库在你的问题中使用。

快速搜索后发现这里有一个开源的spss阅读器,也可以通过这里的Maven获得

使用 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 页面上打开问题。

使用此处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 版本(不幸的是,它似乎没有像 1.3-SNAPSHOT 那样在 maven 上发布)在 write-和 printformat 已被引入。

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

那些返回一个SpssVariableFormat你可以从中获得更多信息的。因为我不知道这一切是关于什么的,所以我能做的最好的就是将您链接到此处的源代码,其中对在那里实现的东西的引用应该可以进一步帮助您(我假设文档中引用的这个链接SpssVariableFormat#getType是可能最有助于确定您在那里拥有哪种格式。

如果绝对没有任何方法可以解决这个问题,我想您也可以使用问题中库的演示版本来确定内容it.next().getClass().getSimpleName(),但只有在没有其他方法来确定格式的情况下,我才会诉诸于此。

于 2019-03-01T06:54:46.607 回答
1

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

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

于 2019-02-21T09:44:43.487 回答