我需要从文本文件(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;
}
但我只得到一行作为输出
答案 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);
}
}
这是我的代码段的输出:
答案 2 :(得分:0)
根据您显示的文件结构interface
和ip address
位于不同的行。所以你不能在for循环的同一次迭代中得到它。当您发现firstWord == "interface"
时,您需要设置一个标志,告诉您下一行是ip address
,并在下一次迭代中检查该标志是否为true
,将当前行解析为{{ 1}}并按照你想要的方式处理它。