如何知道与CSVReader类读取的行相关联的文件的实际行号?假设此类读取的每一行都是文件中的新行,我可以计算行数。问题是可以在CSV文件中包含换行符。因此,例如,拥有3条“逻辑”线并不意味着我们在文件中有3条“物理”线。我有一个错误报告功能,因此几乎总是报告错误的行号。
如何确定文件中的实际行号?谢谢!
答案 0 :(得分:0)
如果您愿意修改source code,可以添加计数器
private String getNextLine()
在
的两个地方增加计数器br.readLine();
调用,并将计数器公开为公共属性。
如果您不想修改源代码,对于返回的每个CSV行,您可以通过1 + the sum of the newline characters in the CSV line
递增自己的计数器(可能是OpenCSV将包含换行符的列返回到您的代码,尽管我还没有测试了那种行为)。如果您的A列有一个换行符,B列有两个换行符,那么实际文件应该类似于:
“这是
Cell A“,”和
细胞
B“
产生3个换行符(或\ r \ n序列,具体取决于您的平台),以及OpenCSV返回的1行。将你的计数器增加4。
答案 1 :(得分:0)
如果您愿意将开源API切换到Super CSV(区分物理行和CSV行),那么您将拥有以下3种方法:
/**
* Gets the current position in the file.
* The first line of the file is line number 1.
*
* @since 1.0
*/
int getLineNumber();
/**
* Returns the untokenized CSV row that was just read
* (which can potentially span multiple lines in the file).
*
* @return the untokenized CSV row that was just read
* @since 2.0.0
*/
String getUntokenizedRow();
/**
* Gets the current row number (i.e. the number of CSV records - including the
* header - that have been read). This differs from the lineNumber, which is
* the number of real lines that have been read in the file.
* The first row is row 1 (which is typically the header row).
*
* @since 2.0.0
*/
int getRowNumber();
答案 2 :(得分:0)
您写道,您需要错误报告的行号。
CsvException
类具有一个getLineNumber
方法,您可以使用。
当然,这仅在出现异常时有效。