如何“禁用”使用 CSVParser / CSVStrategy (Apache Commons) 解析文件时的注释检测

发布于 2025-01-03 19:35:47 字数 950 浏览 1 评论 0原文

在 Java 程序中,我需要解析 CSV 文件。那里没有什么特别不寻常的地方。 我使用的实现是 Apache Commons 的 CSVParser,女巫现在使用 CSVStrategy 作为定义 CSV 方言的参数。

问题是,我需要去掉在输入文件中查找注释的选项。输入文件应该没有注释,并且每个字符(当然 ; 除外)都应该保留并被认为是有意义的。特别是,标准的 # 字符不应该是注释。

这是我到目前为止使用的代码(如预期的那样,这会导致 # 出现问题):

fRead = new FileReader(someFilePath);
data = new CSVParser(fRead, new CSVStrategy(';', '"', '#')).getAllValues();

CSVStrategy 构造函数的第三个参数是 char,因此它不能是

有趣的是 CSVStrategy 中存在静态字符 COMMENTS_DISABLED 和方法 isCommentingDisabled(),但没有类似的设置器。

CSVParser 有一个构造函数,它仅使用读取器和分隔符作为参数,并且没有 CSVStrategy,但它已被弃用。所以我认为有一种方法可以使用 CSVStrategy 实现类似的功能?

In a Java program, I need to parse a CSV file. Nothing extremely unusual there.
The implementation I use is Apache Commons's CSVParser, witch now uses a CSVStrategy as parameter to define the CSV dialect.

The thing is, I need to get rid of the option to look for comments in the input file. The input file is supposed to have no comments, and every character (except ;, of course) should be kept and be considered meaningful. Especially, the standard # character should not be a comment.

Here is the code I use so far (which cause problems with #, as expected) :

fRead = new FileReader(someFilePath);
data = new CSVParser(fRead, new CSVStrategy(';', '"', '#')).getAllValues();

The thrid argument of CSVStrategy's constructor is a char, so it cannot be null.

Something interesting is the presence of the static char COMMENTS_DISABLED and method isCommentingDisabled() in CSVStrategy, yet no setter for something similar.

There is a constructor of CSVParser which takes only the reader and a delimiter char as parameters, and no CSVStrategy, but it's deprecated. So I figure there is a way to achieve similar functionality with the CSVStrategy ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒解孤独 2025-01-10 19:35:47

通过快速查看源代码,似乎您可以像这样使用 CSVStrategy 构造函数:

data = new CSVParser(fRead, new CSVStrategy(';', '"', CSVStrategy.COMMENTS_DISABLED)).getAllValues();

By quickly looking at the source code, it seems that you can use the CSVStrategy constructor like this :

data = new CSVParser(fRead, new CSVStrategy(';', '"', CSVStrategy.COMMENTS_DISABLED)).getAllValues();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文