所以我在终端上读这个:
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; }
}