-1

我从我的流程输出中接收到这张表List<string>

在此处输入图像描述

List<string> list = new List<string>();
StreamReader reader = tsharkProcess.StandardOutput;

            while (!reader.EndOfStream)
            {
                string read = reader.ReadLine();
                list.Add(read);
            }

解析此表以仅显示 ip 地址、值和亲子关系的最佳方法是什么?

4

3 回答 3

1

如果行是制表符分隔的,这将即时读取 ipAddress、值和百分比

using(StreamReader reader = tsharkProcess.StandardOutput)
{
   while (!reader.EndOfStream)
   {
       string[] values = reader.ReadLine().Split('\t');
       if (values.Length == 4)
       {
           string ipAddress = values[0];
           string value = values[1];
           string percentage = values[3];
           ...
       }
   }
}

如果没有,那么可以使用 RegEx 来完成。

using(StreamReader reader = tsharkProcess.StandardOutput)
{
   while (!reader.EndOfStream)
   {
       string row = reader.ReadLine();
       string[] values = Regex.Split(row, @"\s+", RegexOptions.None);
       if (values.Length == 4)
       {
           string ipAddress = values[0];
           string value = values[1];
           string percentage = values[3];
           ...
       }
   }
}

以及硬核 RegEx 解决方案。

public class MyClass
{
    // Lots of code....

    private static Regex regexRowExtract = new Regex(@"^\s*(?<ip>\d+\.\d+\.\d+\.\d+)\s*(?<value>\d+)\s+(?<rate>\d+\.?\d*)\s+(?<percentage>\d+\.?\d*)%\s*$", RegexOptions.Compiled);

    public void ReadSharkData()
    {
        using(StreamReader reader = tsharkProcess.StandardOutput)
        {
            while (!reader.EndOfStream)
            {
                string row = reader.ReadLine();
                Match match = regexRowExtract.Match(row);
                if (match.Success)
                {
                    string ipAddress = match.Groups["ip"].Value;
                    string value = match.Groups["value"].Value;
                    string percentage = match.Groups["percentage"].Value;

                    // Processing the extracted data ...
                }
            }
        }
    }
}

对于 Regex 解决方案,您应该使用:

using System.Text.RegularExpressions;
于 2012-12-14T20:12:55.003 回答
0

我会使用正则表达式,也许不是最好的,而是解决它的一种方法。

IP 正则表达式

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

我没有搜索任何百分比的正则表达式,但我认为它不会那么难。

于 2012-12-14T20:11:06.407 回答
0

您可以创建一个正则表达式,它将匹配一行中的不同值,并逐行解析文件。它应该相对容易,因为您的所有值都由空格分隔。

于 2012-12-14T20:11:55.297 回答