Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net替换大型文本文件中的特定值_Vb.net_Streamwriter - Fatal编程技术网

VB.Net替换大型文本文件中的特定值

VB.Net替换大型文本文件中的特定值,vb.net,streamwriter,Vb.net,Streamwriter,我有一些大的csv文件(每个1.5gb),我需要在其中替换特定的值。我目前使用的方法非常慢,我相当确定应该有办法加快速度,但我只是没有足够的经验知道我应该做什么。这是我的第一篇帖子,我试着搜索相关内容,但没有发现任何内容。任何帮助都将不胜感激 我的另一个想法是将文件分成块,这样我就可以将整个内容读入内存,在内存中进行所有替换,然后输出到一个合并文件。我试过这个方法,但我的方法实际上比我现在的方法慢 谢谢 Sub Main() Dim fName As String = "2009

我有一些大的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
Sub-Main()
Dim fName As String=“2009.csv”
Dim wrtFile As String=“2009.1.csv”
暗线
暗写为字符串
Dim strRead作为新System.IO.StreamReader(fName)读取
Dim strWrite为新System.IO.StreamWriter(wrtFile)
以字符串形式写入
bulkWrite=“”
边读边看-1
lRead=Split(strRead.ReadLine(),“,”)
如果lRead(9)=“5MM+”则lRead(9)=“5000000”
如果lRead(9)=“1MM+”则lRead(9)=“1000000”
lwrite=“”
对于i=lBond(lRead)至uBond(lRead)
lwrite=lwrite和lRead(i)和“,”
下一个
strWrite.WriteLine(lwrite)
环
strRead.Close()
strWrite.Close()
端接头

您正在拆分和合并,这可能需要一些时间

为什么不读这行文字呢。然后将出现的“5MM+”和“1MM+”替换为适当的值,然后写下该行

 Do While ...
    s = strRead.ReadLine();
    s = s.Replace("5MM+", "5000000")
    s = s.Replace("1MM+", "1000000")
    strWrite(s);
 Loop

这会更快,只要可以在第十列以外的地方替换“5MM+”和“1MM+”。@DaMartyr:“第十列”-嗯?在.NET4中你可以试试。这可以显著提高文件操作的性能