我有一些大的csv文件(每个1.5gb),我需要替换特定的值。我目前使用的方法速度非常慢,而且我很确定应该有办法加快速度,但我只是没有足够的经验知道我应该做什么。这是我的第一篇文章,我试图找到相关的东西,但没有遇到任何问题。任何帮助将不胜感激。
我的另一个想法是将文件分成块,以便我可以将整个内容读入内存,在那里执行所有替换,然后输出到合并文件。我试过这个但是我做的方式实际上看起来比现在的方法慢了。
谢谢!
Sub Main()
Dim fName As String = "2009.csv"
Dim wrtFile As String = "2009.1.csv"
Dim lRead
Dim lwrite As String
Dim strRead As New System.IO.StreamReader(fName)
Dim strWrite As New System.IO.StreamWriter(wrtFile)
Dim bulkWrite As String
bulkWrite = ""
Do While strRead.Peek <> -1
lRead = Split(strRead.ReadLine(), ",")
If lRead(9) = "5MM+" Then lRead(9) = "5000000"
If lRead(9) = "1MM+" Then lRead(9) = "1000000"
lwrite = ""
For i = LBound(lRead) To UBound(lRead)
lwrite = lwrite & lRead(i) & ","
Next
strWrite.WriteLine(lwrite)
Loop
strRead.Close()
strWrite.Close()
End Sub
答案 0 :(得分:2)
你正在分裂和合并,这可能需要一些时间。
为什么不直接阅读文字。然后用批准值替换“5MM +”和“1MM +”的任何出现,然后写入该行。
Do While ...
s = strRead.ReadLine();
s = s.Replace("5MM+", "5000000")
s = s.Replace("1MM+", "1000000")
strWrite(s);
Loop