2013-08-31 74 views
-1

我目前有5個CSV文件,每個文件約有45,000條記錄。最好的方法是什麼?我之前完成了I/O,但從來沒有在這個規模上。解析成矢量字符串?讀取大型CSV文件的有效方法?

+0

你的約束是什麼?你有足夠的記憶嗎?多少,如果你不知道是否足夠? –

+0

在本網站上討論過很多次讀取CSV文件。你看過這些方法嗎?如果是的話,他們有什麼問題? – Borgleader

+1

你試過了什麼?它太慢了嗎? 45,000條記錄聽起來並不像需要特別關注的大型數據集。 –

回答

1

是的,將它們讀入vector將是合理的。

存儲的選擇確實取決於您計劃要做什麼以及數據是什麼。如果您知道數據的格式是什麼,您可能需要創建一個struct,並將數據讀取到更有組織的形式。例如。如果該文件是這樣的:

name, score, err 

Mats, 89, 2.1% 
Steve, 79, 8% 

,那麼你可以有這樣的結構:

struct Row 
{ 
    string name; 
    int score; 
    float err; 
} 

正如評論說,45K線不是非常多,它應該不會造成什麼大問題除非你使用手錶的計算能力來運行它。

+0

CSV文件有大約10列。我應該逐行閱讀每個元素還是將列拆分成不同的向量? – Rob

+0

可能是一個很好的計劃。我希望你可以很容易地做到這一點。 –

+0

哪一個好的計劃,每一行都有自己的向量還是每列都有自己的向量? – Rob

1

只要繼續做你正在做的事情:讀所有線路,stringVector一個S,stringVector一個s的Vector,或對象的Vector。我們正在談論200到500 MB RAM,而現在大多數電腦的可用性遠遠超過了這個數字。從處理時間的角度來看,普通計算機的處理時間爲5到10分鐘(當然取決於處理的數量)。

如果遇到任何問題,請提出一個有更多信息的新問題。

+2

咦? 45K記錄需要200-500MB?這是每行2-11KB。聽起來相當多。每行13毫秒來處理它? –

+0

我剛拿了一張有48K記錄的數據庫表格,並將其導出爲CSV格式,其中一個字段是「通知」(基本上,要發送到電子郵件的文本發送給網站的客戶端),以及總數10個領域。該文件是216MB。 –

+0

閱讀這個文件,用一個簡單的程序,我剛剛砍了0.4s。 –