0

我有一个包含 12 列的 .csv 文件,并使用 CSVReader 类读取文件。

List<String[]> rows = reader.readAll();

但我发现一些 String[] 的元素少于 12 个。当我调试时,我发现这是 CSV 文本格式问题。

有两个问题:

  1. 有些列以反斜杠结尾。

    例如,"Column A content\", "Column B content"将被视为一列作为\"转义字符。

  2. 一些单元格的内容包含\"在其中。

    例如,在一行中,A 列的内容是一个命令行: "d -R u+rwX \""${MYTMP}\"" > /dev/null 2>&1; rm -fr \""${MYTMP}\"" >"

所以我想不出一个好的替换策略来处理这个格式问题。(例如全部替换\\\,这适用于"contentA\","contentB"情况,但不适用于\"当它是单元格的内容时)

有什么建议么?也欢迎讨论您在 CSV 文件中遇到的不良格式问题和解决方案,以便 Reader 无法正确读取。

4

2 回答 2

1

我认为如果你\",\\",那个替换它会解决你的问题。最有可能的 Unix 命令行在 . 之后不包含,字符\"。Yo 可能必须使用\", "to\\", "或添加空格来扩展它。

一个特殊情况是当您的最后一列结束时,因此\"<nl>应替换为\\"<nl><nl>拥有的任何行分隔符 ( \r\n,\r\n)

于 2013-07-17T21:00:12.100 回答
0

如果您有如下一行:

"Column A content\","Column B content","d -R u+rwX \""${MYTMP}\"" > /dev/null 2>&1; rm -fr \""${MYTMP}\"" >"

尝试下一个:

CSVParser parser = new CSVParser();
String line = "\"Column A content\\\",\"Column B content\",\"d -R u+rwX \\\"\"${MYTMP}\\\"\" > /dev/null 2>&1; rm -fr \\\"\"${MYTMP}\\\"\" >\"";
line = line.replaceAll("\\\\\"(?=,)", "\\\\\\\\\"");
line = line.replaceAll("\\\\\"\"", "\\\\\"");
String[] array = parser.parseLine(line);
for (String str : array) {
    System.out.println(str);
}

输出:

Column A content\
Column B content
d -R u+rwX "${MYTMP}" > /dev/null 2>&1; rm -fr "${MYTMP}" >
于 2013-07-17T21:26:24.440 回答