【发布时间】:2020-09-25 20:05:46
【问题描述】:
我有一个程序在 Putty 中执行 df -k 命令的等效项。我在将结果字符串 lines 拆分为子字符串时遇到问题。
输入
这是我运行程序时得到的数据的摘录:
Filesystem 1024-blocks Used Available Capacity Mounted on
rpool/ROOT/solaris-0 47185886 39055271 6723316 86% /
rpool/ROOT/solaris-0/var 47185886 334036 6723316 5% /var
/dev 0 0 0 0% /dev
/u01 104857600 92783432 12074167 89% /u01
proc 0 0 0 0% /proc
ctfs 0 0 0 0% /system/contract
mnttab 0 0 0 0% /etc/mnttab
swap 333382928 536 333382392 1% /system/volatile
预期
理想情况下,我想将上面的每一行拆分为子字符串,并将这些结果子字符串转换为模型。 .. 例如第 2 行将有 6 个这样的子字符串:
rpool/ROOT/solaris-0
47185886
39055271
6723316
86%
/
...这些子字符串中的每一个都将被转换为具有属性的模型DiskStatistics:
public String Filesystem { get; set; }
public double Blocks { get; set; }
public double Used { get; set; }
public double Available { get; set; }
public int Capacity { get; set; }
public string Mount { get; set; }
我尝试将其中一行(在示例控制台应用程序中)拆分如下:
string line = "rpool/ROOT/solaris-0 47185886 39055271 6723316 86% /";
Int32 count = 6;
String[] separator = { ", ", "" };
String[] strlist = line.Split(separator, count,
StringSplitOptions.RemoveEmptyEntries);
foreach (var s in strlist)
{
Console.WriteLine(s);
Console.ReadKey();
}
但是对于输出我只能得到:
rpool/ROOT/solaris-0 47185886 39055271 6723316 86% /
我观察到原始数据中每对子串之间的空格(分隔符)也不统一。
这就是我在原始程序中获取数据的方式:
using (SshClient ssh = new SshClient("+ server IP + ",
"+ username +", "+ password +"))
{
ssh.Connect();
var result = ssh.RunCommand("df -k");
var rss = result.Result;
string[] lines = rss.Split('\n');
var stats = new List<DiskStatistics>();
foreach (var line in lines)
{
//Split each line in lines into 6 substrings
//Cast each substring (up to 6 in each line that is split) to Model DiskStatistics
}
}
我怎样才能做到这一点?
【问题讨论】:
-
String[] separator = { ", ", "" };我不明白 - 如果输入中甚至不存在这样的分隔符,为什么还要使用它们? -
@BartoszKP 我弄错了。我什至不知道如何用这种方法实现我的意图。我的问题在于我的数据中的空格分隔符不统一。一些子字符串有 3 个分隔它们的空格,有的有 4 个,以此类推。而那个实现geeksforgeeks.org/string-split-method-in-c-sharp-with-examples 是我迄今为止最接近实现我的目标..
-
String[] separator = { " " }; String[] strlist = line.Split(separator, StringSplitOptions.RemoveEmptyEntries); -
@Golide Retired Ninja 所说的是您所描述的事情的解决方案,但它仍然与您的代码不匹配 -
line中没有多个分隔符 - 每个条目都被单个空格包围.所以目前还不清楚你想在那里展示什么。 -
@BartoszKP 是的,我刚刚验证过。它的分裂很好。我错误地粘贴了行。我已经修改并测试了数据集中的所有行