1

我如何知道文件上与 CSVReader 类读取的行相关联的实际行号?假设此类读取的每一行都是文件中的新行,我可以计算行数。问题是 CSV 文件中可能有换行符。因此,例如,拥有 3 条“逻辑”行并不意味着我们在文件中有 3 条“物理”行。我有一个错误报告功能,因此几乎总是报告错误的行号。

任何想法如何确定文件中的真实行号?谢谢!

4

3 回答 3

0

如果您愿意修改源代码,您可以添加一个计数器

private String getNextLine()

在两个地方增加计数器

br.readLine();

被调用,并将计数器作为公共属性公开。

如果您不想修改源代码,对于返回的每个 CSV 行,您可以将自己的计数器递增1 + the sum of the newline characters in the CSV line(可能 OpenCSV 正在将包含换行符的列返回到您的代码,尽管我没有测试过这种行为)。如果 A 列有一个换行符,B 列有两个换行符,则实际文件应如下所示:

“这是

单元格 A","和

细胞

乙"

产生 3 个换行符(或 \r\n 序列,取决于您的平台),加上 OpenCSV 返回的 1 行。将您的计数器增加 4。

于 2012-09-10T18:15:00.143 回答
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();
于 2012-12-12T21:44:37.690 回答
0

您写道,您需要错误报告的行号。
该类CsvException有一个getLineNumber您可以使用的方法。

当然,这仅在您有异常时才有效。

于 2019-12-02T12:38:05.237 回答