使用C#如何将文本文件拆分为多个文件

时间:2019-01-11 12:58:14

标签: c# file-io streamreader

如何将包含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++;
            }

        }
    }
}

3 个答案:

答案 0 :(得分:0)

这应该或多或少地达到目的:

node_modules

答案 1 :(得分:0)

由SOH和ETX提供,您的意思是各自的控制字符,这应该可以助您一臂之力:

var txt = "";
const char soh = (char) 1;
const char eox = (char) 3;
var count = 1;
var pathToFile = @"C:\00_Projects_temp\test.txt";

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

while (txt.Contains(soh))
{
    var outfil = Path.Combine(Path.GetDirectoryName(pathToFile), count.ToString("000"), "_test.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++;
}

答案 2 :(得分:0)

谢谢LocEngineer该程序的工作原理,我几乎没有做任何更改来使用“ +”而不是“,”将文件名包含在计数器中。

using System.IO;
using 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();

            if (txt.IndexOf(soh) != txt.LastIndexOf(soh))
            {


                while (txt.Contains(soh))
                {
                    var outfil = Path.Combine(Path.GetDirectoryName(pathToFile), count.ToString("00") + Path.GetFileName(pathToFile));
                    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++;
                }
                File.Move((pathToFile), (pathToFile) + ".org");
            }
        }
    }
}