как разделить / отфильтровать выходную строку и записать разделенные данные в разные текстовые поля? - PullRequest
0 голосов
/ 23 ноября 2018

Итак, у меня есть кнопка и два текстовых поля.Я хочу нажать на кнопку, она выполнит 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"

Позже я хочу пропинговать ip в textbox2 и заставить текстовое поле менять цвет, если он доступен, и кнопку для подключения к rdp.этот ip, если он достижим, так что мне нужно, чтобы он не имел пробелов и был просто строкой

Я думал написать каждое слово, разделенное пробелом, в массив, а затем прочитать массив и написать что-токоторые совпадают в коробках с чем-то вроде этого:

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

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

Но прежде чем продолжить, я хотел бы спросить, есть ли более простой и быстрый способ сделать это, и я вообще иду в неправильном направлении?может быть, есть способ просто вернуть определенные параметры из команды nslookup?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы можете использовать Dns.GetHostEntry вместо вызова внешнего процесса вручную:

IPHostEntry hostInfo = Dns.GetHostEntry("example.com");
textbox1.Text = hostInfo.HostName;
textbox2.Text = hostInfo.AddressList[yourIndex].ToString();
0 голосов
/ 23 ноября 2018

Регулярные выражения могут помочь вам здесь.Вот как вы можете получить имя, для адреса оно будет похоже:

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