gpt4 book ai didi

java - 如何使用 Super CSV 跳过只有空白的行?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:32 24 4
gpt4 key购买 nike

如何配置 Super CSV 以跳过空白行或仅空白行?

我正在使用 CsvListReader,有时我的数据中会出现空白行。当发生这种情况时,异常的效果是:

number of CellProcessors must match number of fields

我只想跳过这些行。

最佳答案

更新:Super CSV 2.1.0(2013 年 4 月发布)允许您通过首选项提供 CommentMatcher,这样您就可以跳过被视为注释的行。您可以使用 2 个内置匹配器,也可以提供自己的匹配器。在这种情况下,您可以使用 new CommentMatches("\\s+") 来跳过空行。


super CSV 只跳过零​​长度的行(只是一个行终止符)。

如果有空行,则它不是有效的 CSV 文件(请参阅 RFC4180 的 rule 4,其中指出每一行在整个文件中应包含相同数量的字段)。空行唯一有效的情况是它是被引号包围的多行字段的一部分。例如

column1,column2
"multi-line field

with a blank line",value2

也就是说,可以使 Super CSV 对空行更加宽松(它可以忽略它们)。如果你可以发布 feature request在我们的 SourceForge 页面上,我们可以进一步调查这一点,并可能在未来的版本中添加此功能。

虽然现在这对您没有帮助!

我还没有对此进行广泛的测试,但它应该可以工作:)您可以编写自己的标记器来跳过空行:

package org.supercsv.io;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.supercsv.prefs.CsvPreference;

public class SkipBlankLinesTokenizer extends Tokenizer {

public SkipBlankLinesTokenizer(Reader reader, CsvPreference preferences) {
super(reader, preferences);
}

@Override
public boolean readColumns(List<String> columns) throws IOException {

boolean moreInput = super.readColumns(columns);

// keep reading lines if they're blank
while (moreInput && (columns.size() == 0 ||
columns.size() == 1 &&
columns.get(0).trim().isEmpty())){
moreInput = super.readColumns(columns);
}

return moreInput;
}

}

只需将其传递给阅读器的构造函数(您必须将首选项传递给阅读器和分词器):

ICsvListReader listReader = null;
try {
CsvPreference prefs = CsvPreference.STANDARD_PREFERENCE;
listReader = new CsvListReader(
new SkipBlankLinesTokenizer(new FileReader(CSV_FILENAME), prefs),
prefs);
...

希望对你有帮助

关于java - 如何使用 Super CSV 跳过只有空白的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13797616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com