日期:2014-05-17  浏览次数:20971 次

ReadLine如何预读或指定行
有文本格式如下:
 ...
 G00 Z20.0
(此处可能还有一个括号)
 M05 
 M09 
 (D=6.0 R=0.0)
 G91 G28 Z0 
 T2 M06

 G80 G17 G40 G49 
 G90 G54 G00 X0 Y0 
 ...

想要实现将该文本根据“T2 M06”分割成两个文档:
 ...
 G00 Z20.0
(此处可能还有一个括号)
 M05 
 M09
 
 和

 (D=6.0 R=0.0)
 G91 G28 Z0 
 T2 M06
 G80 G17 G40 G49 
 G90 G54 G00 X0 Y0 
 ...

问题是“T2 M06”之前还有两行(从括号那一行开始,括号内的内容属于解释文本,属于被分割后的第二个文档) 请问怎么才能实现以关键词之前的一个括号为分界点进行文档分割?
ReadLine 分割 关键词 文档

------解决方案--------------------

            string str = File.ReadAllText("D:\\1.txt", Encoding.Default);
            var ary = Regex.Matches(str, @"(?is).+?(?=$
------解决方案--------------------
\([^()]+\)[^()]*?T2\s+M06)").OfType<Match>().Select(t => t.Value).ToArray();
           
------解决方案--------------------
      System.IO.StreamReader sr = new System.IO.StreamReader("c:\\A.txt", System.Text.Encoding.Default);
        System.Text.StringBuilder sbPrev = new System.Text.StringBuilder();  //前半部分
        System.Text.StringBuilder sbNext = new System.Text.StringBuilder();  //后半部分

        string strLine = sr.ReadLine();
        bool bNextStart = false;
        while (strLine != null)
        {
            if (strLine.IndexOf("(") >= 0 && strLine.IndexOf(")") > strLine.IndexOf("(")) //含有(...)
                bNextStart=true;

            if(!bNextStart) //属于前半部分
                sbPrev.Append(strLine);
            else
                sbNext.Append(strLine);
        }
        sr.Close();

        Console.WriteLine(sbPrev.ToString()); //前半部分
        Console.WriteLine(sbNext.ToString()); //后半部分