首页 > 解决方案 > 使用 C# 如何将文本文件拆分为多个文件

问题描述

如何将包含 ASCII 码 SOH 和 ETX 的文本文件拆分为多个文件?

例如,我命名为 001234.txt 的文本文件包含以下内容:

SOH{ABCDXZY}ETX

SOH{ABCDXZY}ETX

SOH{ABCDXZY}ETX

对于以 SOH 开头并以 ETX 结尾的每个 ASCII 代码,我想将单个文本文件拆分为多个文本文件。

单个文本文件名应拆分为 101234.txt 、 111234.txt..etc ,每个都包含以 SOH 开头并以 ETX 结尾的单个内容。

我很感激任何帮助。

使用 System.IO;使用 System.Linq;

namespace ASCII_Split
{
    class Program
    {
        static void Main(string[] args)
        {
            var txt = "";
            const char soh = (char)1;
            const char eox = (char)3;
            var count = 1;
            var pathToFile = @"‪‪C:\Temp\00599060.txt";

            using (var sr = new StreamReader(pathToFile))
                txt = sr.ReadToEnd();

            while (txt.Contains(soh))
            {
                var outfil = Path.Combine(Path.GetDirectoryName(pathToFile), count.ToString("000"), "_fix.txt");
                var eInd = txt.IndexOf(eox);
                using (var sw = new StreamWriter(outfil, false))
                {
                    sw.Write(txt.Substring(1, eInd - 1));
                }
                txt = txt.Substring(eInd + 1);
                count++;
            }

        }
    }
}

标签: c#file-iostreamreader

解决方案


这应该或多或少起到作用:


    //Read all text from file into a string
    var fileContent = File.ReadAllText("001234.txt");

    //split text into array according to a Regex pattern
    var pattern = @"SOH*ETX";
    var splitContent = Regex.Split(fileContent, pattern);

    //counter for file names
    var counter = 10;
    foreach(var content in splitContent)
    {
        //create file and use stream to write to it
        using (var stream = File.Create($"{counter++}1234.txt"))
        {
            var contentAsBytes = new UTF8Encoding(true).GetBytes(content);
            stream.Write(contentAsBytes, 0, contentAsBytes.Length);
        }
    }


推荐阅读