gpt4 book ai didi

java - 如何读取 Java 中包含多行单元格的 .csv 文件?

转载 作者:太空狗 更新时间:2023-10-29 11:13:33 24 4
gpt4 key购买 nike

我正在尝试在 Java 程序中读取 .csv 文件。该文件有一些包含多行的单元格。

我在 linux 操作系统上,所以我尝试使用以下内容删除换行符:

awk -v RS=""'{gsub (/\n/,"")}1' cleanPaperAuthor.csv > cleanPaperAuthor1.csv

DID 导致单元格中的多行数据全部显示在一行中。但是当我尝试用java读入文件时,读者仍然认为它在单元格数据中间遇到了行尾。

所以我试过了awk -v RS=""'{gsub (/\r/,"")}1' cleanPaperAuthor1.csv > cleanPaperAuthor2.csv

这导致 .csv 文件中的所有数据都放在一行上。

然后我尝试了awk -v RS=""'{gsub (/\r\n/,"")}1' cleanPaperAuthor.csv > cleanPaperAuthor3.csv.

我不确定这是否有效 - 我仍在打开文件的过程中。

我知道那里有一个 CSVReader 类,但我真的很想弄清楚我可以做什么,而不必处理设置和更改我的代码。那里有人有什么想法吗?我现在完全糊涂了。

最佳答案

使用 CSV 解析器非常简单;安装程序和 API。而且,除了处理跨越多行的值之外,它还可以处理诸如引号元素中的逗号之类的事情,并为您解析引号内的值 "" 等。此外,您还可以使用该库将文本序列化回 CSV。

这是一个 OpenCSV 的例子读取一行 csv 值。

    String input = "value1, \"value2\", \"value3, 1234\", \"value4\n"
+ "value5\n"
+ "value6\"";

try (CSVReader reader = new CSVReader(new StringReader(input))) {
String [] tokens;
while ((tokens = reader.readNext()) != null) {
System.out.println(Arrays.toString(tokens));
}
} catch (IOException e) {
e.printStackTrace();
}

输出: (“value3, 1234”是一个值。)

[value1, value2, value3, 1234, value4
value5
value6]

只需确保添加 Apache Commons Lang 3.x jar 到您的类路径

关于java - 如何读取 Java 中包含多行单元格的 .csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29425928/

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