使用带有逗号定界符的扫描仪读取Excel CSV文件时,其将读取第一行的最后一个节点,同时读取下一行的第一个节点。
self.Jobs.loc[self.Jobs['TARGET_TABLE'] == Table, 'DONE'] = 1
使用Debugger后,我注意到当它到达最后一个元素时,它会将它们组合成-14256 \ r \ n-14323
-14256 =第一行的最后一个元素 -14323 =下一行的第一个元素
答案 0 :(得分:1)
扫描仪仅将逗号作为定界符。但是您希望它也接受行尾作为另一个定界符。
我假设您使用Scanner::useDelimiter
实例化扫描仪,如下所示:
Scanner s = new Scanner( inputStream ).useDelimiter( "," );
如果我正确理解了Pattern定义,应该是:
Scanner s = new Scanner( inputStream ).useDelimiter( ",|\\R" );
\ R代表
换行符:任何Unicode换行符序列,等效于\ u000D \ u000A | [\ u000A \ u000B \ u000C \ u000D \ u0085 \ u2028 \ u2029]
有关详细信息,请参考java.util.regex.Pattern
的文档。
答案 1 :(得分:1)
CSV文件包含一行文本,其中每一行包含用逗号分隔的值。因此,我建议您逐行读取文件,然后split在逗号上每行。像...
java.io.FileReader fr = new java.io.FileReader("path to file");
java.io.BufferedReader br = new java.io.BufferedReader(fr);
String line = br.readLine();
while (line != null) {
String[] fields = line.split(",");
// Add code here to handle the "fields".
line = br.readLine();
}
请注意,上面的代码不是完整的解决方案,而是一个起点。例如,我还没有关闭BufferedReader
。