将字符串拆分为数组



所以我在终端上读这个:

IN-USE  SSID                        MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
*       example                     Infra  1     130 Mbit/s  71      ▂▄▆_  WPA2
example2                    Infra  10    130 Mbit/s  65      ▂▄▆_  WPA2

我尝试了几种方法将其分解为数组,以便在使用中将在[0]和SSID在[1]等但是我使用的是通过两个字符之间的空格数来拆分字符串,我看到最小距离是2个空格但是当我读到一个SSID,在单词之间有两个空格,比如:im here,它会导致破裂部分出现问题,我试过Split("t"),没有工作有什么建议吗?

假设列是固定宽度,您可以使用以下方法将单行拆分为字符串数组:

string[] ParseLine(string input) =>
new[] {
input[..6].TrimEnd(),
input[8..34].TrimEnd(),
input[36..41].TrimEnd(),
input[43..47].TrimEnd(),
input[49..59].TrimEnd(),
input[61..67].TrimEnd(),
input[69..73].TrimEnd(),
input[75..].TrimEnd()
};

要分割整个文本,您需要将其分成几行,然后解析每行:

var lines = text.Split('n');
var result = lines.Select(ParseLine);

result的值现在是一个包含字符串的数组序列。您可以使用foreach枚举元素或使用ToArray()将其转换为数组。

固定宽度相应列的宽度通常改变他们的一些属性时变得更大。这个解决方案将字符串转换为c#列表,可以用于任何报表或智能。所以试试这个

var headerEndIndex = origString.IndexOf("SECURITY") + "SECURITY".Length + 2;
var header = origString.Substring(0, headerEndIndex).Replace("n", "").Replace("r", ""); ;
var dataStringArray=origString.Substring(headerEndIndex).Split("n");


for (var i=0; i< dataStringArray.Length; i++) 
dataStringArray[i] = dataStringArray[i].Replace("n", "").Replace("r", "");

var ssidIndex= header.IndexOf("SSID");
var modeIndex= header.IndexOf("MODE");
var chanIndex= header.IndexOf("CHAN");   
var rateIndex= header.IndexOf("RATE");
var signalIndex= header.IndexOf("SIGNAL");
var barsIndex= header.IndexOf("BARS");   
var securityIndex= header.IndexOf("SECURITY");   

List<SignalInfo> list= new List<SignalInfo>();

for (var i=0; i< dataStringArray.Length; i++) 
{
var item=new SignalInfo();
item.InUse=    dataStringArray[i][0] =='*';
item.Ssid=dataStringArray[i][ssidIndex..modeIndex].TrimEnd();
item.Mode=dataStringArray[i][modeIndex..chanIndex].TrimEnd();
item.Chan= Convert.ToInt32(dataStringArray[i][chanIndex..rateIndex]);
item.Rate= dataStringArray[i][rateIndex..signalIndex].TrimEnd();
item.Signal= Convert.ToInt32(dataStringArray[i][signalIndex..barsIndex]);
item.Bars= dataStringArray[i][barsIndex.. securityIndex].TrimEnd();
item.Security= dataStringArray[i].Substring(securityIndex).TrimEnd();
list.Add(item);
};

以Jason格式输出

[
{
"InUse": true,
"Ssid": "example",
"Mode": "Infra",
"Chan": 1,
"Rate": "130 Mbit/s",
"Signal": 71,
"Bars": "u2582u2584u2586_",
"Security": "WPA2"
},
{
"InUse": false,
"Ssid": "example2",
"Mode": "Infra",
"Chan": 10,
"Rate": "130 Mbit/s",
"Signal": 65,
"Bars": "u2582u2584u2586_",
"Security": "WPA2"
}
]

public class SignalInfo
{
public bool InUse    {get; set;}
public string Ssid {get; set;}
public string Mode { get; set; }
public int Chan { get; set; }
public string Rate { get; set; }
public int Signal { get; set; }
public string Bars { get; set; }
public string Security { get; set; }
}

最新更新