逐行处理和更新大文件

发布于 2024-10-16 13:18:43 字数 272 浏览 3 评论 0原文

所以我正在处理一个 200 mb 的 txt 文件,我必须读取文件中的每一行更新一两列,然后保存相同的内容。实现同样目标的最佳方法是什么?

我正在考虑加载到数据表中,但是在内存中保存这么大的文件是一个很大的痛苦。

我意识到我应该分批进行,但是实现相同目标的最佳方法是什么?

我不认为我想首先加载到 dB,因为无论如何我都无法进行批量更新。我也必须在那里逐行阅读。

就像更新一样,我的文件基本上具有任何顺序的列,并且我需要始终更新两列或更多列。

谢谢。

So I am processing a 200 mb txt file and I have to read each row in the file update one or two columns and then save the same. What is the best way to achieve the same?

I was thinking of lading into a datatable but holding that big of a file in memory is a big pain.

I realise I should do it in batches but what is the best way to achieve the same?

I dont think I want to load into a dB first cos I cant do a mass update anyways. i Have to do a line by line read there too.

Just as an update my files basically have columns in any order and I need to update two or more columns all the time.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蝶舞 2024-10-23 13:18:43

读取一行,解析它,并将字段写入临时文件。完成所有行后,删除原始文件并重命名临时文件。

Read a line, parse it, and write fields into a temp file. When all the lines are done, delete the original file and rename the temp file.

迷荒 2024-10-23 13:18:43

要添加蚂蚁所说的内容...

您有选择...

  • 逐行:

    <块引用>

    StreamReader fileStream = new StreamReader( sourceFileName );
    StreamWriter ansiWriter = new StreamWriter( 目标文件名,  
      假,Encoding.GetEncoding(20127));  
    字符串文件内容;  
    while ( ( fileContent = fileStream.ReadLine() ) != null )  
    {  
        YourReplaceMethod( 文件内容 );  
        ansiWriter.WriteLine( 文件内容 );  
    }
    文件流.关闭();  
    ansiWriter.Close();  
    

  • 批量(今天的盒子应该能够处理 200MB,不会出现问题):

    <块引用>

    byte[] bytes = File.ReadAllBytes( sourceFileName );
    byte[] writeMeBytes = YourReplaceMethod( bytes );
    File.WriteAllBytes( 目标文件名, writeMeBytes );
    

To add to what Ants said...

You have options ...

  • Line by line:

    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 (today's boxes should be able to handle 200MB w/o problems):

    byte[] bytes = File.ReadAllBytes( sourceFileName );
    byte[] writeMeBytes = YourReplaceMethod( bytes );
    File.WriteAllBytes( destinationFileName, writeMeBytes );
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文