VB.Net Замена определенных значений в большом текстовом файле - PullRequest
2 голосов
/ 04 июня 2011

У меня есть несколько больших CSV-файлов (1,5 ГБ каждый), где мне нужно заменить конкретные значения.Метод, который я сейчас использую, ужасно медленный, и я совершенно уверен, что должен быть способ ускорить это, но я просто недостаточно опытен, чтобы знать, что мне делать.Это мой первый пост, и я попытался найти что-то актуальное, но ничего не нашел.Буду признателен за любую помощь.

Моя другая мысль будет разбить файл на куски, чтобы я мог прочитать все это в памяти, сделать все замены там, а затем вывести в консолидированный файл.Я попробовал это, но способ, которым я это сделал, на самом деле оказался медленнее, чем мой текущий метод.

Спасибо!

    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

1 Ответ

2 голосов
/ 04 июня 2011

Вы разбиваете и объединяете, что может занять некоторое время.

Почему бы просто не прочитать строку текста.Затем замените любое вхождение "5MM +" и "1MM +" соответствующим значением и затем напишите строку.

 Do While ...
    s = strRead.ReadLine();
    s = s.Replace("5MM+", "5000000")
    s = s.Replace("1MM+", "1000000")
    strWrite(s);
 Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...