2017-10-11 76 views
1

我想解析一個使用Univocity CSV引號的CSV,我發現在解析某些值時缺少關閉引號。Univocity CSV:解析後缺少引號

CSV: 
ACCT,NAME,AGE,ADDRESS 
700,GINI,23,"AB,ECITY-1" 
800,HANNAH,30,"AB,ECITY-1" 
900,IAN,40,"XYZ,ECITY-1" 
1900,LYDIA,40,"XYZ,ECITY-1" 

輸出:

[GINI, "AB,ECITY-1] 
[HANNAH, "AB,ECITY-1] 
[IAN, "XYZ,ECITY-1] 
[LYDIA, "XYZ,ECITY-1] 



CsvParserSettings settings = new CsvParserSettings(); 
settings.getFormat().setLineSeparator("\n"); 
settings.setKeepQuotes(true); 
settings.setQuoteDetectionEnabled(false); 
settings.trimValues(true); 
settings.excludeFields(excludeHeaders.split("ACCT,AGE")); 
CsvParser baseFileParser = new CsvParser(settings); 
String[] baseRow; 
baseFileParser.beginParsing(baseFile); 
while((baseRow = baseFileParser.parseNext())!= null){ 
     System.out.println(Arrays.toString(baseRow)); 
} 

我在想什麼。爲什麼輸出中缺少關閉報價?

回答

1

找到了答案myslef ..不得不刪除以下行,如果上述線路是否使用版本2.5.8刪除

0

settings.getFormat().setLineSeparator("\n"); 

代碼工作正常?如果不是,那麼這看起來與我最近修復的a bug有關。只是更新,它會工作。

一點解釋:

在你的情況下,錯誤將體現出來,如果你設置settings.getFormat().setLineSeparator("\n");但輸入文件具有\r\n作爲分隔符。 \r將由解析器作爲空白處理並觸發該錯誤。

這就是爲什麼要刪除settings.getFormat().setLineSeparator("\n");爲你工作 - 如果你在Windows上,解析器使用的默認行分隔符將是\r\n。這將避免該錯誤,因爲在行結束之前沒有尾隨空白。