-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];
           ...
       }
   }
}

そして、ハードコア正規表現ソリューション.

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 ...
                }
            }
        }
    }
}

正規表現ソリューションの場合、次を使用する必要があります。

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

行の個別の値に一致する正規表現を作成し、ファイルを 1 行ずつ解析できます。すべての値が空白で区切られているため、比較的簡単なはずです。

于 2012-12-14T20:11:55.297 に答える
0

私は正規表現を使用しますが、おそらく最善ではありませんが、それを解決する1つの方法です。

IP の正規表現

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

パーセントの正規表現を検索しませんでしたが、それほど難しくはないと思います。

于 2012-12-14T20:11:06.407 に答える