gpt4 book ai didi

c# - 在 C# 中拆分 CSV 文件的有效方法

转载 作者:行者123 更新时间:2023-11-30 20:07:26 25 4
gpt4 key购买 nike

我正在尝试根据账单中的电话号码将 300MB 的 CSV 文件形式的大型电信账单分成较小的 block 。

有些电话号码的帐单有 20 行,有些则有 1000 多行,因此它是动态的。首先,我阅读账单并使用 LINQ 按电话号码对它们进行分组,并计算账单包含的 CSV 文件中每个电话号码账单的行数。然后插入列表: split_id ,起始行,结束行。 (起始行从0开始)。

下面的脚本是我用来拆分较小账单的脚本。但这 300MB 有异常多的 7500 个电话号码,即使每个文件都减少到 100KB 以下,处理拆分账单需要很长时间。

    static void FileSplitWriter(List<SplitFile> pList, string info)
{

pList.ForEach(delegate(SplitFile per)
{
int startingLine = per.startingLine;
int endingLine = per.endingLine;
string[] fileContents = File.ReadAllLines(info);
var query = fileContents.Skip(startingLine - 1).Take(endingLine - (startingLine - 1));
string directoryPath = Path.GetDirectoryName(info);
string filenameok = Path.GetFileNameWithoutExtension(info);

StreamWriter ffs = new StreamWriter(directoryPath + "\\" + filenameok + "_split" + per.id + ".csv");
foreach (string line in query)
{
ffs.WriteLine(line);
}
ffs.Dispose();
ffs.Close();
});


}

我的问题是,这个过程是否有可能变得更快/更有效率?按照目前的速度,单独拆分文件需要 3 个小时左右。

最佳答案

看起来这段代码中效率最低的部分是您多次 将整个 300MB 文件读入内存。你应该只需要阅读一次......

  1. 将文件读入一些可枚举的数据结构。
  2. 按电话号码分组。
  3. 遍历每个组并将每个组写入一个文件。

注意:如果您使用的是 .NET 4.0,您可能会通过使用 File.ReadLines()(而不是 ReadAllLines)获得一些内存效率。

关于c# - 在 C# 中拆分 CSV 文件的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456517/

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