我有一个包含12列的.csv文件,并使用CSVReader类读取该文件。
List<String[]> rows = reader.readAll();
但我发现一些String []的元素少于12个。当我调试时,我发现这是CSV文本格式问题。
有两个问题:
有些列以反斜杠结尾。
例如,"Column A content\", "Column B content"
将被视为一列,因为\"
被视为转义字符。
某些单元格的内容中包含\"
。
例如,在一行中,列A的内容是命令行:
"d -R u+rwX \""${MYTMP}\"" > /dev/null 2>&1; rm -fr \""${MYTMP}\"" >"
所以我想不出一个好的替代策略来处理这种格式问题。
(例如,将所有\
替换为\\
,这适用于"contentA\","contentB"
情况,但在\"
为单元格的内容时不起作用)
有什么建议吗?也欢迎讨论您在CSV文件中遇到的错误格式问题和解决方案,以便Reader正确阅读问题。
答案 0 :(得分:1)
我认为如果您将\",
替换为\\",
来解决您的问题。
很可能Unix命令行在,
之后不包含\"
个字符。哟可能需要将\", "
扩展到\\", "
或者添加空格。
特殊情况是您的上一列结束,因此\"<nl>
应替换为\\"<nl>
,其中<nl>
是您拥有的任何行分隔符(\r\n
,{{ 1}}或\r
)
答案 1 :(得分: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}" >