当前位置: 首页 > 知识库问答 >
问题:

OpenCSV -找出行号

米丰
2023-03-14

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

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

共有3个答案

阎伟志
2023-03-14

您写下您需要用于错误报告的行号
CsvException类有一个<code>getLineNumber

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

穆景辉
2023-03-14

如果您愿意将开源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();
关志
2023-03-14

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

private String getNextLine()

在以下两个位置递增计数器:

br.readLine();

,并将计数器公开为公共属性。

如果您不希望修改源代码,对于返回的每一行CSV,您可以将自己的计数器增加1 CSV行中换行符的总和(大概OpenCSV正在将包括换行符在内的列返回到您的代码中,尽管我没有测试过这种行为)。如果您的列A有一个换行符,列B有两个换行符,实际文件应该如下所示:

“这是

细胞A”、“和

细胞

B“

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

 类似资料:
  • opencsv一个简单的CSV解析Java包。它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符。

  • 我对java librairie OpenCSV有问题。我没有读完我的CSV文件的所有行,我只读了第二行,我不知道为什么... 我的CSV文件: 我使用OpenCSV创建一个android列表,只有“Julie”“Julie”这一行被添加了3次...

  • 我有这样的csv列表: 当像这样使用开放解析时: 我得到以下结果: 第 1 行 abcdefghi 第2行 jkl;mno;p; 第3行 qrs;tuv;wxy; 第4行 z;zz;zzz; 如何让它像它应该的那样工作,即每行中的值在数组中分开?

  • 我有一个CSV文件,它将在引号内有分隔符或未关闭的引号,我如何使CSVReader忽略引号和引号内的分隔符。例如: 这是文件的内容。 下面的程序读取csv文件。 我收到了这样的订单。 之后报价发生了什么 编辑: 开放电脑依赖 com.开放电脑 3.4

  • 我用的是opencsv 2.3 for Java。我像这样设置我的CSVReader对象来处理 在我的文件中,我有以下几行: 数据从SQL Server表导出到CSV文件。 OpenCSV正确识别第一行的三列,但第二行只有两列。 如何配置 OpenCSV 以识别第二行的三列数据?

  • 我正在尝试使用OpenCsv从CSV解析即时,如下所示: 我知道OpenCsv应该支持< code>java.time。 但是当我试图使用它的时候,我得到了下面的异常: 分析CSV行时出错:8。 ... 原因:java.time.format。DateTimeParseException:无法解析文本“2022-04-21 00:00:00”:无法从临时加速器获取即时数据:{HourOfAmPm=