【发布时间】:2015-04-03 03:49:26
【问题描述】:
我正在尝试在 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 类,但我真的很想弄清楚我可以做什么,而不必处理设置和更改我的代码。有没有人有任何想法?我现在完全糊涂了。
【问题讨论】:
-
如果你打算使用java,你为什么要摆弄awk?
-
因为我不知道修复文件的简单方法。我需要将多行单元格更改为单行,其中没有
。 .csv 文件太大而无法打开和编辑 - 大约 617,000 字节。如果在 Java 中有一种简单的方法可以做到这一点,我完全赞成。 -
问题是我不确定你的 .csv 文件是什么样子的。如果单元格可以有换行符,那么什么会终止一行?
-
我完全不知道。我试图在写字板中打开它来编辑它并去掉多行单元格,但我的应用程序因为文件太大而冻结了。
-
实际上,我刚刚浏览了 Ravi 指向您的 OpenCSV 源代码。诀窍是引号。只要您的单元格不仅用逗号分隔而且用引号括起来,那么单元格中的新行仅适用于该单元格而不是该行。如果您的单元格被引用,那么 OpenCVS 应该可以满足您的要求。