gpt4 book ai didi

java - 如果整行以引号 "开头,Univocity CSV 解析器会粘合整行

转载 作者:行者123 更新时间:2023-12-02 01:49:40 26 4
gpt4 key购买 nike

我正在使用 univocity 2.7.5 解析 csv 文件。到目前为止,它工作正常,并将 csv 文件中的一行解析为包含 n 个元素的字符串数组,其中 n = 行中的列数。但现在我有一个文件,其中行以引号 " 开头,解析器无法处理它。它以字符串数组形式返回一行,只有一个元素包含整行数据。我尝试删除该引号来自 csv 文件,它工作正常,但大约有 500,000 行。我应该怎么做才能使它工作?

这是我的文件中的示例行(源文件中也有引号):

 "100926653937,Kasym Amina,620414400630,Marzhan Erbolova,""Kazakhstan, Almaty, 66, 3"",87029845662"

这是我的代码:

    CsvParserSettings settings = new CsvParserSettings();
settings.setDelimiterDetectionEnabled(true);
CsvParser parser = new CsvParser(settings);
List<String[]> rows = parser.parseAll(csvFile);

最佳答案

这里是该库的作者。您的输入是一个格式良好的 CSV,其中单个值包括:

100926653937,Kasym Amina,620414400630,Marzhan Erbolova,"哈萨克斯坦, 阿拉木图, 66, 3",87029845662

如果该行出现在您输入的中间,我想您的输入有未转义的引号(在您到达该行之前的某个位置)。尝试使用未转义的引号处理设置:

例如,这可能有效:

settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_CLOSING_QUOTE);

如果没有任何效果,并且您的所有行看起来都像您发布的行,那么您可以解析输入两次(这很糟糕且缓慢,但会起作用):

CsvParser parser = new CsvParser(settings);
parser.beginParsing(csvFile);

List<String[]> out = new ArrayList<>();
String[] row;
while ((row = parser.parseNext()) != null) {
//got a row with unexpected length?
if(row.length == 1){
//break it down again.
row = parser.parseLine(row[0]);
}
out.add(row);
}

希望这有帮助。

关于java - 如果整行以引号 "开头,Univocity CSV 解析器会粘合整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169596/

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