如何分隔/过滤输出字符串并将分隔的数据写入不同的文本框?

时间:2018-11-23 12:31:47

标签: c# .net string nslookup

所以我有一个按钮和两个文本框。 我想单击一个按钮,它将执行nslookup,然后我要:

-write the resolved hostname into one text box
-write the resolved ip adress into next text box 

到目前为止,我已经拥有

    System.Diagnostics.Process p = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
                psi.FileName = "nslookup.exe";
                psi.Arguments = "google.com";

                psi.RedirectStandardOutput = true;
                psi.UseShellExecute = false;

                psi.CreateNoWindow = false;
                p.StartInfo = psi;
                p.Start();

                p.WaitForExit();

                System.IO.StreamReader output = p.StandardOutput;

                textbox1.Text = output.ReadToEnd().ToString();

现在,它执行解析并将所有内容写入一个字符串。 如何过滤输出字符串并将字符串的特定部分写入单独的框中?

示例输出字符串将为:(这是一个单行字符串,但为了便于理解,我将其写在表中)

Server:  EXAMPLE //this i dont need
Address:  EXAMPLE //this i dont need

Name:    google.com //i need this to be written to TextBox1
Address: 172.217.21.206 //i need this to be written to TextBox2

所以最后:

Textbox.Text = "google.com"
Textbox2.Text = "172.217.21.206"

稍后我想对textbox2中的ip进行ping操作,并在文本框可访问的情况下使文本框更改颜色,并在其可访问的情况下将rdp的按钮连接到该ip,因此我需要它没有任何空格并且只是一个字符串

我当时正在考虑将每个由空格分隔的单词写成一个数组,然后读取该数组并将匹配的内容写到类似这样的框中:

string[] words = outputstring.Split(' ');

        foreach (var word in words)
        {
            System.Console.WriteLine($"<{word}>");
        }

但是在我继续之前,我想问一问是否有更简便,更快捷的方法来实现这一目标,而我却一起走错了方向?也许有一种方法可以从nslookup命令中返回特定的参数?

2 个答案:

答案 0 :(得分:2)

您可以使用Dns.GetHostEntry来代替手动调用外部进程:

IPHostEntry hostInfo = Dns.GetHostEntry("example.com");
textbox1.Text = hostInfo.HostName;
textbox2.Text = hostInfo.AddressList[yourIndex].ToString();

答案 1 :(得分:0)

正则表达式可以在这里为您提供帮助。检索名称的方法如下,因为该地址将是类似的:

Regex.Match(text, @"Name: *(?<name>[^ ]+)").Groups["name"].Value