You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中按分组拆分竖线分隔文件

按竖线分隔字段拆分文件到对应命名的独立文件(LINQ实现)

问题场景

现有一个竖线分隔的文本文件,每行第二个字段为目标文件名,需要将原文件按该字段分组,把每组内容写入对应名称的独立文件。

示例输入文件内容

A|File1
B|File1
C|File1
D|File2
E|File2
F|File2
G|File3
H|File3
I|File3

期望输出

  • 生成File1.txt,内容为:
A|File1
B|File1
C|File1
  • 生成File2.txt,内容为:
D|File2
E|File2
F|File2
  • 生成File3.txt,内容为:
G|File3
H|File3
I|File3

解决方案代码

以下是使用C# LINQ实现的完整代码,核心是通过LINQ分组获取唯一文件名并批量写入文件:

using System;
using System.IO;
using System.Linq;

namespace FileSplitter
{
    class SplitWithGroups
    {
        static void Main()
        {
            // 读取原文件所有行
            string[] myfile = File.ReadAllLines(@"D:\FileSplitter\TestFile.txt");
           
            // LINQ分组查询:按每行拆分后的第二个字段(目标文件名)分组
            var groupQuery = from line in myfile
                             let targetFileName = line.Split('|')[1]
                             group line by targetFileName into groupedLines
                             select groupedLines;

            // 遍历每个分组,写入对应文件
            foreach (var group in groupQuery)
            {
                // 构造输出文件路径
                string outputFilePath = @"D:\FileSplitter\" + group.Key + ".txt";

                // 控制台输出当前处理的文件名(可选)
                Console.WriteLine("正在写入文件:{0}", group.Key);

                // 使用StreamWriter写入文件,using块自动释放资源
                using (StreamWriter sw = new StreamWriter(outputFilePath))
                {
                    foreach (var line in group)
                    {
                        sw.WriteLine(line);
                        // 控制台输出当前写入的行(可选)
                        Console.WriteLine("   写入行:{0}", line);
                    }
                }
            }

            // 保持控制台窗口打开(调试用)
            Console.WriteLine("文件拆分完成,按任意键退出");
            Console.ReadKey();
        }
    }
}

关键代码解释

  • 分组查询groupQuery:
    1. 遍历原文件的每一行line
    2. 使用let关键字定义临时变量targetFileName,通过line.Split('|')[1]提取每行的第二个字段(目标文件名)
    3. 使用group line by targetFileName into groupedLines将所有行按目标文件名分组,每个分组的Key就是目标文件名,分组内包含所有对应行

内容的提问来源于stack exchange,提问作者Zach Lau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:12:17