gpt4 book ai didi

c# - 在c#中操作文本文件

转载 作者:行者123 更新时间:2023-11-30 16:06:08 25 4
gpt4 key购买 nike

我分配了一个项目,该项目需要一个 c# 控制台应用程序,该应用程序将用于操作文本文件。文本文件是 bcp 表转储。该程序应该能够:

  1. 根据用户给定的列将文件拆分为多个文件
  2. 在输出中包含或排除拆分列

目前,我正在这样阅读文件:

var groupQuery = from name in File.ReadAllLines(fileName)
.Skip(skipHeaderRow)
let n = name.Split(delimiterChars)
group name by n[index] into g
// orderby g.Key
select g;

我担心我可能会遇到内存问题,因为有些文件可能有超过 200 万条记录,每行大约 2617 字节

最佳答案

如果您确信您的程序只需要按顺序访问... bcp 转储文件,请使用 StreamReader类读取文件。此类针对顺序访问进行了优化,并将文件作为流打开,因此内存问题不应困扰您。此外,您可以通过从此类的不同构造函数初始化以在内存中使用更大的 block 来增加流的缓冲区大小。


如果你想随机访问你的文件......去寻找Memory Mapped Files .确保在文件的有限部分创建 View 访问器。 MMF 链接中给出的示例代码解释了如何在大文件上创建小 View 。


编辑:我的答案中有使用 MMF 的代码,但我意识到现在已将其删除...尽管实际上 group by 是懒惰的,它也是一个non-streaming LINQ 运算符。因此,它必须读取您的整个 bcp 转储才能最终为您提供结果。这意味着:

  1. StreamReader 显然是更适合您的方法。确保将缓冲区增加到最大可能;
  2. 您的 LINQ 将需要一些时间才能按运算符(operator)命中组,并且只有在整个文件读取完成后才会恢复生机。

关于c# - 在c#中操作文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com