2014-01-14 75 views
0

我有一個csv文件,其中包含5個字段(列)。在5列中,我想只讀取進一步處理所需的第二和第四列。 現在我正在使用opencsv api的readAll()方法來讀取。 通過使用此方法,我必須處理所有列以獲取第二和第四列值。如何從CSV文件讀取特定列?

有什麼辦法來讀取所需的列值即讀取csv文件第二和第四值?

是正確的方法還是應該使用其他方法?

+0

即使你必須閱讀所有5個領域在哪裏丟棄領域的問題,你不需要? – PeterMmm

+0

@PeterMmm我想知道是否有任何其他方法通過header-name讀取csv文件。如果我指定標題,則只能讀取該標題下的數據。 – Vishwas

+0

我能想到的唯一合理方法需要結構化(csv-)文件。即文件中的每個字段具有已知的固定大小。如果你有任意長度的字段,你可以開始根據可能性進行猜測搜索。享受實施。我寧願建議將csv導入DBS。 –

回答

0

如果性能是一個問題,它看起來像你的問題,我會建議實現你自己的解析器。 opencsv不提供這樣的功能。可能因爲表現勝利不會那麼大。

0

我不這麼認爲。

爲了確定哪一列具有索引,CSV解析器必須處理整行或至少到最後一欄,你有什麼(第四個你的情況)。即使你的數據是固定長度的,你仍然需要閱讀整行,以便知道子字符串的邊界。

如果內存使用是一個問題,然後使用CSVReader#readAll()是不是最好的選擇。在這種情況下,我建議使用CSVReader#iterator(),並通過返回數組的索引來訪問您的列,例如。 myCsvRow[1]myCsvRow[3]

0

使用共享CSV你可以遍歷CSV元素,並使用列標籤讀取特定列。

注意:(Common CSV是openCsv和其他csv解析器的統一)。 http://commons.apache.org/proper/commons-csv/

用於讀取特定列,您可以將每個csvRecord轉換成地圖,並得到其數值如下:

List<CSVRecord> aCSVList == aCSVParser.getRecords(); 
... 
for (CSVRecord aCSVRecord : aCSVList) 
{ 
    ... 
    Map<String, String> aCurrentMap = aCSVRecord.toMap(); 
    aCurrentMap.get("ColumnLabel"); 
}