2013-07-17 115 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}" >