我有一個10GB的CSV文件,它本質上是一個巨大的矩形矩陣。我試圖編寫一個函數,可以儘可能有效地訪問矩陣的單個單元格,即矩陣[12345,20000]。CSV隨機存取; C#
考慮到它的大小,顯然不可能將整個矩陣加載到二維數組中,我需要以某種方式直接從文件中讀取值。
我已經使用FileStream.Seek搜索文件隨機訪問,但不幸的是由於變量四捨五入每個單元格不是固定的寬度。我不可能找到一個特定的字節,並通過某種算術來了解我在看什麼單元格。
我考慮掃描文件併爲每行的第一個字節的索引創建一個查找表。這樣,如果我想訪問矩陣[12345,20000],我會尋找行12345的開始,然後掃描行,計算逗號,直到我到達正確的單元格。
我即將嘗試這個,但有其他人有更好的想法嗎?我相信我不會是第一個嘗試處理這樣的文件的人。
乾杯
編輯:我要指出,該文件包含了非常稀疏矩陣。如果解析CSV文件速度過慢,我會考慮將該文件轉換爲更適當且更易於處理的文件格式。什麼是存儲稀疏矩陣的最佳方式?
我不明白這怎麼能防止尋找和加載全部內存。這只是一個連續的閱讀器。 – 2011-01-28 00:03:21