为什么文件读取一行的最后一行和第二行的第一行

时间:2019-07-01 20:09:36

标签: java file csv java.util.scanner

使用带有逗号定界符的扫描仪读取Excel CSV文件时,其将读取第一行的最后一个节点,同时读取下一行的第一个节点。

self.Jobs.loc[self.Jobs['TARGET_TABLE'] == Table, 'DONE'] = 1

使用Debugger后,我注意到当它到达最后一个元素时,它会将它们组合成-14256 \ r \ n-14323

-14256 =第一行的最后一个元素 -14323 =下一行的第一个元素

2 个答案:

答案 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