2017-08-04 101 views
0

有什麼方法可以通過它來讀取基於值的特定行記錄。例如,我的csv文件是:閱讀csv中的特定行

ProductID,ProductName,price,availability,type 
12345,Anaox,300,yes,medicine 
23456,Chekmeter,400,yes,testing 

我想獲得ProductID爲'23456'的行。我正在檢查new CsvReader(「D:\products.csv」).getRawRecord()方法,但它沒有任何方法參數。

+1

只是迭代通過文件有什麼問題嗎? –

+0

你必須編碼。 openCSV擁有您所需要的一切。逐行讀取並像這樣測試列的值value.equalsIgnoreCase(「23456」) –

+0

事情是我不想迭代。因爲如果我的文件有1000條記錄,那麼爲了獲得一個位於第999個位置的行,我必須迭代998個不是執行解決方案的記錄。 – user2142786

回答

0
Iterator iterator = CsvReader("D:\\products.csv").Iterator(); 
while(iterator.hasNext()){ 
    if((String[] string = (iterator.next))[0] == 23456) 
     sout("Found the row: " + string[0] + ", " + string[1] + ", " + string[2] + ", " + string[3] + ", " + string[4]); 
} 

以及關於你對性能的關注:

  1. 與1.000元,這仍然會比你需要的是更快的方式,擔心當你到1.000.000元素

  2. 如果你想要高性能的閱讀,你必須使用存儲你的ID的高性能的方式。如果您只是每次增加一個新的ID,並且永遠不要刪除一個ID,您可以使用該ID作爲索引來直接獲取正確的行。

+1

方法Iterator()對於CsvReader類型是未定義的。我正在使用下面的庫導入com.csvreader.CsvReader; import com.csvreader.CsvWriter; – user2142786

+0

谷歌CsvReader,你會發現它的Java文檔,在那裏你會發現方法迭代器應該給你的字符串數組。 –

+0

代碼被扔在一起,只是爲了向你展示理解,而不是爲了精確複製粘貼 –