Java代码中使用Weka CSVLoader时的Java IO异常

时间:2012-04-30 18:43:10

标签: java csv io weka

我正在尝试使用Java代码自动化一些Weka分类。当我尝试读取我的csv文件时出现以下错误:

  

java.io.IOException:错误的值数。阅读98,预期97,   读取令牌[EOL],第3行   weka.core.converters.ConverterUtils.errms(ConverterUtils.java:912)at at   weka.core.converters.CSVLoader.getInstance(CSVLoader.java:747)at at   weka.core.converters.CSVLoader.getDataSet(CSVLoader.java:570)at at   Classifier_Search.readFile(Classifier_Search.java:18)at   Classifier_Search.main(Classifier_Search.java:178)at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)at   java.lang.reflect.Method.invoke(未知来源)at   edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)

当我尝试通过Weka GUI提供csv文件时出现相同的错误。据我所知,csv文件与我成功用于Weka的其他csv文件没什么区别。有关可能导致此错误的原因的任何想法?

我无法在OldNabble上找到一个令人满意的答案 - 我已经尝试了一个我设法找到的建议但它没有用。一个建议是用双引号封装条目 - 这没有改变任何东西。

为了清楚起见(因为我不知道如何上传内容),csv文件如下所示:

C1V1,C2V1,C3V1,... Class,

4000.5,3890.6,2900.7,... N,

...

...

每行有97个条目。在另一个版本中,我在字符串和字符周围有双引号(在第一行和最后一列),正如我之前所说,这没有帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用weka工具时也遇到了同样的问题。我能够像这样整理出来。

enter image description here

当您收到此类型的异常时。找到提示行上方的行。例如:在我的情况下,我被提示异常是由于80542行中的某些错误所以我需要检查80541行。然后你可以看到该行中有一个额外的逗号或额外的双引号。删除多余的逗号或双引号并保存文件。再次运行它。然后它正常工作,没有任何例外。

答案 1 :(得分:0)

我发现了差异:如果.csv文件中的行末尾有逗号,则会导致csvloader抛出此错误。因此,如果您尝试使用此功能,请删除.csv文件中行末尾的逗号。我不知道为什么只有第3行而不是第1行和第2行引发了错误(所有行都相同),但这修复了它。