如何从文本文件C#中复制多行

时间:2017-04-16 12:03:30

标签: c# asp.net .net

我需要从文本文件(cisco配置文件)中复制多行:基于以下条件  如果该行以界面复制从界面开始直到'! '

我的文件就像:

  

<!/ P>      

access-list 1&gt;

     

<!/ P>      

界面1

     

ip address xx.xx.xx.xx

     

<!/ P>      

界面2

     

ip address xx.xx.xx.xx

     

<!/ P>      

路线1

     

<!/ P>

我尝试以下代码:

var lines = File.ReadAllLines("C:\\My File2.txt");
foreach (var line1 in lines){
  string firstWord = line1.Split(' ').First();
  if ((firstWord == "access-list") && (!line1.Contains("remark ")))
  {
    TextBox1.Text = TextBox1.Text + "\r\n" + line1;
  }
  else if (firstWord == "nat")
  {
     TextBox2.Text = TextBox2.Text + "\r\n" + line1;
  }
     else if (firstWord == "interface")
  {
     var result = lines.Substring(line1.LastIndexOf('!') + 1);
     TextBox3.Text = TextBox3.Text + "\r\n" + result;
  }

但我只得到一行作为输出

3 个答案:

答案 0 :(得分:1)

如果您想保留算法,这对您有用。

        var lines = File.ReadAllLines("C:\\My File2.txt");

        int i;
        for (i = 0; i<lines.Length;i++)
        {
            var line1 = lines[i];
            if (line1 == "!" || line1 == " ") continue;

            if (line1.StartsWith("access-list")) && (!line1.Contains("remark ")))
            {

                TextBox1.Text = TextBox1.Text + "\r\n" + line1;
            }
            else if (line1.StartsWith("nat"))
            {
                 TextBox2.Text = TextBox2.Text + "\r\n" + line1;

            }
            if (line1.StartsWith("interface"))
            {
                var str = line1;
                while (!Equals(lines[i + 1], "!"))
                {
                    str += lines[i + 1];
                    i++;
                }
                TextBox3.Text = TextBox3.Text + "\r\n" + str;
            }
        }

答案 1 :(得分:0)

你应该使用&#34; File.ReadAllText&#34;而不是&#34; File.ReadAllLines&#34;。 &#34; File.ReadAllText&#34;返回包含完整文本文件文本的字符串。之后,您可以使用&#34; String.Split&#34;生成字符串数组的方法。

var lines = File.ReadAllText("C:\\My File2.txt");
var seperatedStrings = lines.Split('!');

&#34; seperatedStrings&#34;的每个索引包含你想要的东西。

更新:这是一段代码片段,可以提供帮助:

var lines = File.ReadAllText("C:\\My File2.txt");
        var seperatedStrings = lines.Split('!');

        foreach (var oneString in seperatedStrings)
        {
            if (oneString.Contains("access-list"))
            {
                Console.WriteLine("Access-List: " + oneString);
            }else if (oneString.Contains("nat"))
            {
                Console.WriteLine("Nat: " + oneString);
            }else  if (oneString.Contains("interface"))
            {
                Console.WriteLine("Interface: " + oneString);
            }
        }

这是我的代码段的输出:

enter image description here

答案 2 :(得分:0)

根据您显示的文件结构interfaceip address位于不同的行。所以你不能在for循环的同一次迭代中得到它。当您发现firstWord == "interface"时,您需要设置一个标志,告诉您下一行是ip address,并在下一次迭代中检查该标志是否为true,将当前行解析为{{ 1}}并按照你想要的方式处理它。

相关问题