我的Tshark out put给我一张IP表,我想以降序显示它们,这是我的代码获得过程输出:
_process = new ProcessStartInfo(_tsharkPath);
_process.Arguments = (string.Format("-r {1}{0}{1} -q -z ip_hosts,tree ", _filePath, "\""));
_process.WindowStyle = ProcessWindowStyle.Hidden;
_process.UseShellExecute = false;
_process.RedirectStandardOutput = true;
_process.RedirectStandardError = true;
_process.CreateNoWindow = true;
_process.UseShellExecute = false;
_process.ErrorDialog = false;
Process tsharkProcess = Process.Start(_process);
StreamReader reader = tsharkProcess.StandardOutput;
tsharkProcess.WaitForExit(10000);
List<string> list = new List<string>();
SortedDictionary<string, string> table = new SortedDictionary<string, string>();
while (!reader.EndOfStream)
{
string read = reader.ReadLine();
list.Add(read);
}
我收到了列表中的表格
这是我的表格,我只想评价IP和precent:
===================================================================
IP Addresses value rate percent
-------------------------------------------------------------------
IP Addresses 31584 0.322127
159.0.89.20 6002 0.061215 19.00%
192.168.0.100 31288 0.319108 99.06%
60.240.244.115 16 0.000163 0.05%
204.83.232.29 2698 0.027517 8.54%
177.16.241.40 2499 0.025487 7.91%
90.231.37.56 848 0.008649 2.68%
117.204.2.26 172 0.001754 0.54%
69.247.52.146 1909 0.019470 6.04%
188.126.75.143 75 0.000765 0.24%
173.212.107.113 8 0.000082 0.03%
114.47.15.111 26 0.000265 0.08%
219.192.199.2 2 0.000020 0.01%
59.97.56.175 986 0.010056 3.12%
50.53.9.249 2376 0.024233 7.52%
76.18.194.203 123 0.001254 0.39%
41.233.19.39 428 0.004365 1.36%
203.84.186.210 659 0.006721 2.09%
58.40.202.85 2 0.000020 0.01%
88.160.36.13 2 0.000020 0.01%
117.199.195.22 432 0.004406 1.37%
112.202.141.240 443 0.004518 1.40%
46.240.116.228 7 0.000071 0.02%
41.46.174.7 1259 0.012841 3.99%
112.135.159.14 1 0.000010 0.00%
201.215.244.25 66 0.000673 0.21%
223.67.159.170 2 0.000020 0.01%
67.204.32.252 626 0.006385 1.98%
2001:0:9d38:6ab8:aa:a1a:b048:3f7d 286 0.002917 0.91%
2001:0:9d38:953c:2481:166c:90bb:db19 50 0.000510 0.16%
2607:5300:10:101::1:209 8 0.000082 0.03%
83.248.5.18 6 0.000061 0.02%
98.221.248.250 80 0.000816 0.25%
83.100.249.165 60 0.000612 0.19%
89.254.132.166 14 0.000143 0.04%
119.50.230.109 40 0.000408 0.13%
190.193.144.107
33 0.000337 0.10%
答案 0 :(得分:0)
Regular Expressions
会让你的生活更轻松。首先,定义要捕获的数据的基本结构:
private struct TSharkOutput
{
public IPAddress ip;
public uint value;
public decimal rate;
public decimal percent;
};
您可以根据需要添加/删除部分并更改数据类型。
接下来是正则表达式来处理这个问题。我首当其冲地将IPAddress匹配到内部类。
var regTshark = new Regex(@"^\s*(?<ip>[\d.:]+)\s+(?<val>\d+)\s+(?<rate>\d+\.\d+)\s+(?<perc>\d+\.\d+)%", RegexOptions.Compiled);
现在为你的解析功能,我做这样的事情;
_process = new ProcessStartInfo(_tsharkPath);
_process.Arguments = (string.Format("-r {1}{0}{1} -q -z ip_hosts,tree ", _filePath, "\""));
_process.WindowStyle = ProcessWindowStyle.Hidden;
_process.UseShellExecute = false;
_process.RedirectStandardOutput = true;
_process.RedirectStandardError = true;
_process.CreateNoWindow = true;
_process.UseShellExecute = false;
_process.ErrorDialog = false;
var tsharkProcess = Process.Start(_process);
var reader = tsharkProcess.StandardOutput;
tsharkProcess.WaitForExit(10000);
var list = new List<TSharkOutput>();
var regTshark = new Regex(@"^\s*(?<ip>[\d.:]+)\s+(?<val>\d+)\s+(?<rate>\d+\.\d+)\s+(?<perc>\d+\.\d+)%", RegexOptions.Compiled);
Match current;
string line = "";
while (!reader.EndOfStream)
{
line = reader.ReadLine();
if ((current = regTshark.Match(line)).Success)
{
var shark = new TSharkOutput()
{
value = uint.Parse(current.Groups["val"].Value),
rate = decimal.Parse(current.Groups["rate"].Value),
percent = decimal.Parse(current.Groups["perc"].Value)
};
if (IPAddress.TryParse(current.Groups["ip"].Value, out shark.ip))
list.Add(shark); // all good add to the list.
}
}
// sorted is an IEnumerable<TSharkOutput> which has been ordered by the percentage in descending order
var sorted = list.OrderByDescending(ts => ts.percent);
请注意,我现在不在家,因此我无法尝试编译上述代码,但我相当自信,其中大部分应该有效。让我知道。
干杯。