2013-07-17 62 views
0

我有一个12列的.csv文件,并使用CSVReader类读取文件。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正确读取问题。

回答

1

我认为,如果您将\",替换为\\",即可解决您的问题。 很可能Unix命令行在\"之后不包含,字符。哟可能需要扩展它\", "\\", "或者可能会添加空格。当你的最后一列结束

一个特殊情况是,如此\"<nl>应及时更换,\\"<nl>其中<nl>是什么行分隔符,你有(\r\n\r\n

+0

谢谢,我会先尝试看看这是否会导致其他错误。 –

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