Обработка и обновление большого файла строка за строкой - PullRequest
0 голосов
/ 10 февраля 2011

Итак, я обрабатываю текстовый файл размером 200 МБ, и мне приходится читать каждую строку в файле, обновлять один или два столбца, а затем сохранять то же самое.Каков наилучший способ добиться того же?

Я думал о том, чтобы получить доступ к датируемым данным, но держать этот большой файл в памяти - большая боль.

Я понимаю, что я должен делать это партиями, но как лучше всего добиться того же?

Не думаю, что сначала я хочу загрузить в дБ, потому что я все равно не могу сделать массовое обновление,Я тоже должен построчно читать там.

Так же, как обновление, мои файлы в основном имеют столбцы в любом порядке, и мне нужно постоянно обновлять два или более столбцов.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Чтение строки, ее анализ и запись полей во временный файл.После завершения всех строк удалите исходный файл и переименуйте временный файл.

1 голос
/ 10 февраля 2011

Чтобы добавить к сказанному Муравьями ...

У вас есть варианты ...

  • Строка за строкой:

    StreamReader fileStream = new StreamReader( sourceFileName );
    StreamWriter ansiWriter = new StreamWriter( destinationFileName,  
      false, Encoding.GetEncoding( 20127 ) );  
    string fileContent;  
    while ( ( fileContent = fileStream.ReadLine() ) != null )  
    {  
        YourReplaceMethod( fileContent );  
        ansiWriter.WriteLine( fileContent );  
    }
    fileStream.Close();  
    ansiWriter.Close();  
    
  • Bulk (современные боксы должны обрабатывать 200 МБ без проблем):

    byte[] bytes = File.ReadAllBytes( sourceFileName );
    byte[] writeMeBytes = YourReplaceMethod( bytes );
    File.WriteAllBytes( destinationFileName, writeMeBytes );
    
...