C# 将字符串行拆分为多个字符串

标签 c# arrays string list text

我正在尝试弄清楚如何将一些 cmd 输出拆分为多个字符串,以便稍后用于设置标签。

我使用的代码是:

ProcessStartInfo diskdrive = new ProcessStartInfo("wmic", " diskdrive get index, model, interfacetype, size");
diskdrive.UseShellExecute = false;
diskdrive.RedirectStandardOutput = true;
diskdrive.CreateNoWindow = true;
var proc = Process.Start(diskdrive);

string s = proc.StandardOutput.ReadToEnd();

它给出了这样的输出:

Index  InterfaceType  Model                   Size           
2      IDE            WesternDigital    1000202273280  
1      IDE            Seagate             500105249280   
0      IDE            SAMSUNG SSD 830 Series  128034708480

是否可以将其放入列表或数组中,以便我可以获得例如磁盘 2 的大小或磁盘 0 的接口(interface)类型。我可以在 C# 中做一些基本的事情,但这是我的头:我

最佳答案

这是一个工作示例。 “结果”将包含一个包含您需要的相关部分的列表。这是第一次通过,我相信可以进行一些重构:

using System;
using System.Collections.Generic;
using System.Linq;

namespace columnmatch
{
    internal class Program
    {

        private const string Ex1 = "2      IDE            WesternDigital    1000202273280";
        private const string Ex2 = "1      IDE            Seagate             500105249280 ";
        private const string Ex3 = "0      IDE            SAMSUNG SSD 830 Series  128034708480";

        private static void Main(string[] args)
        {
            var result = new List<MyModel>();
            result.Add(ParseItem(Ex1));
            result.Add(ParseItem(Ex2));
            result.Add(ParseItem(Ex3));
        }

        private static MyModel ParseItem(string example)
        {
            var columnSplit = example.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries);

            int index = -1;
            string interfaceType = string.Empty;
            long size = -1;
            string model = string.Empty;

            if (columnSplit.Count() == 4)
            {
                //direct match (no spaces in input)
                index = Convert.ToInt32(columnSplit[0]);
                interfaceType = columnSplit[1];
                model = columnSplit[2];
                size = Convert.ToInt64(columnSplit[3]);
            }
            else
            {
                string modelDescription = string.Empty;

                for (int i = 0; i < columnSplit.Count(); i++)
                {
                    if (i == 0)
                    {
                        index = Convert.ToInt32(columnSplit[i]);
                    }
                    else if (i == 1)
                    {
                        interfaceType = columnSplit[i];
                    }
                    else if (i == columnSplit.Count() - 1) //last
                    {
                        size = Convert.ToInt64(columnSplit[i]);
                    }
                    else
                    {
                        //build the model
                        modelDescription += columnSplit[i] + ' ';
                    }
                }

                model = modelDescription.TrimEnd();
            }

            var myItem = BuildResultItem(index, interfaceType, model, size);
            return myItem;
        }

        private static MyModel BuildResultItem(int index, string interfaceType, string model, long size)
        {
            var myItem = new MyModel
            {
                Index = index,
                InterfaceType = interfaceType,
                Model = model,
                Size = size
            };

            return myItem;
        }

        private class MyModel
        {
            public int Index { get; set; }
            public string InterfaceType { get; set; }
            public string Model { get; set; }
            public long Size { get; set; }
        }
    }
}

这个答案遵循我评论中的事实:总是有 4 列,第一列和最后一列总是数字,并从那里开始。

关于C# 将字符串行拆分为多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668534/

相关文章:

java - 如何在二维数组中每列的正下方打印列总计

python - 比较列表中的单词而不是字母 - 从 SequenceMatcher 包中获得意外输出

javascript - 二维数组中的重复数字

c - 反转字符串列表顺序

Java:需要修改乘法表字符串以在每个字符之间添加空格

c# - .net core rc2 非平凡集成测试不起作用

c# - Entity Framework 代码优先问题(SimpleMembership UserProfile 表)

c# - Lucene .NET 搜索结果

C# - 可以在单独的线程中安全地拥有一个拥有的表单吗?

java - 打印 Java 数组的最简单方法是什么?