Nicole Nicole - 2 months ago 21
Java Question

Java IO Exception when using Weka CSVLoader in Java code

I am trying to automate some Weka classification using Java code. I'm getting the following error when I try to read my csv file: wrong number of values. Read 98, expected 97,
read Token[EOL], line 3 at
weka.core.converters.ConverterUtils.errms( at
weka.core.converters.CSVLoader.getInstance( at
weka.core.converters.CSVLoader.getDataSet( at
Classifier_Search.readFile( at
Classifier_Search.main( at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at
java.lang.reflect.Method.invoke(Unknown Source) at

I get the same error when I try to feed the csv file in through the Weka GUI. As far as I know, the csv file is no different from other csv files that I've successfully used with Weka. Any thoughts about what could be causing this error?

I haven't been able to find a satisfactory answer on OldNabble for this - I've tried the one suggestion that I managed to find and it did not work. The one suggestion was to encapsulate the entries in double quotes - that did not change anything.

Just for clarity (and because I don't know how to upload things), the csv files look like this:

C1V1, C2V1, C3V1, ... Class,

4000.5, 3890.6, 2900.7, ... N,



There are 97 entries per row. In another version, I have double quotes around the strings and chars (in the first row and last column) and, as I previously stated, that doesn't help.



I've discovered the difference: if there is a comma at the end of a line in a .csv file, it causes csvloader to throw this error. So, if you're trying to use this, eliminate the commas at the ends of lines in your .csv file. I don't know why only line 3 and not lines 1 and 2 threw the error (all lines were identical), but this fixed it.