用混合字符和不统一的定界符分割字符串

问题描述 投票:0回答:1

我有一个程序执行与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

                }

            }

我该如何实现?

c# arrays substring
1个回答
-1
投票

[如果您知道空格是分隔符,但是使用的空格数量未知,一种选择是将Match类与C#中的Regex库一起使用:

示例:


foreach (var line in lines)
{
  // Creates an array of results that are non-whitespace.
  var m = Regex.Match(line, @"(\S+)"); 

  for (int i = 1; i <= m.Groups.Count; i++)
  {
    Console.WriteLine($"{m.Groups[i].Value}");
  }
}

额外好处:它还可以处理用户使用制表符而不是空格的情况!

© www.soinside.com 2019 - 2024. All rights reserved.