CSVReader无法正确读取行



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

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

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

有两个问题:

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

    例如,"Column A content", "Column B content"将被读取为一列,因为"被视为转义符。

  2. 某些细胞的内容物中含有CCD_ 3。

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

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

有什么建议吗?也欢迎讨论您在CSV文件中遇到的错误格式问题和解决方案,以便读者在正确阅读时遇到问题。

我认为,如果用\",替换",,就会解决您的问题。最有可能的Unix命令行在"后面不包含,字符。Yo可能必须用", "将其扩展到\", ",或者可能添加空白。

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

如果你有一行像下一行:

"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}" >

最新更新