通过自定义分隔符将一个大文本文件拆分为较小的文件.每个新文件名都派生自较小文件的标头



我使用以下代码将一个大文本文件拆分为许多较小的文本文件,使用"/*"作为分隔符。

这按预期工作,但是我现在希望从每个新的较小的文本文件中提取第一行文本,并使用它来单独命名每个文本,而不是"C:\output-files-{0}.txt",C:\output-files-{1}.txt...等。

请问有人可以帮忙吗?

非常感谢。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Running file splitter now...");
        Splitter splitter = new Splitter();
        splitter.Split("C:\STA_PRD_allJobs.JIL", "C:\output-files-{0}.txt");
        Console.WriteLine("JIL script splitting complete.");
    }
}
class Splitter
{
    public void Split(string inputfile, string outputfilesformat)
    {
        int i = 0;
        System.IO.StreamWriter outfile = null;
        string line;
        try
        {
            using (var infile = new System.IO.StreamReader(inputfile))
            {
                while (!infile.EndOfStream)
                {
                    line = infile.ReadLine();
                    if (line.Contains("/*"))  
                    {
                        if (outfile != null)
                        {
                            outfile.Dispose();
                            outfile = null;
                        }
                    }
                    if (outfile == null)
                    {
                        outfile = new System.IO.StreamWriter(
                            string.Format(outputfilesformat, i++),
                            false,
                            infile.CurrentEncoding);
                    }
                    outfile.WriteLine(line);
                }
            }
        }
        finally
        {
            if (outfile != null)
                outfile.Dispose();
        }
    }
}

您可以读取第一行并存储在变量中。

public void Split(string inputfile, string outputfilesformat)
{
    int i = 0;
    System.IO.StreamWriter outfile = null;
    string line;
    try
    {
      var firstLine = string.Empty;
      using (var infile = new System.IO.StreamReader(inputfile))
      {
            while (!infile.EndOfStream)
            {
                line = infile.ReadLine();
                if(string.IsNullOrEmpty(firstLine))
                firstLine = line;
                if (line.Contains("/*"))  
                {
                    if (outfile != null)
                    {
                        outfile.Dispose();
                        outfile = null;
                    }
                }
                if (outfile == null)
                {
                    outfile = new System.IO.StreamWriter(
                        $"{firstLine}.txt",
                        false,
                        infile.CurrentEncoding);
                   firstLine = string.Empty;
                }
                outfile.WriteLine(line);
            }
        }
    }
    finally
    {
        if (outfile != null)
            outfile.Dispose();
    }
}

最新更新