我从串行端口收到字符串答复,该答复包含3个不同的值。每个值都用';'
分隔。
例如;
10;155.4587;0.01
我需要将这些值分开并添加到Listview框中。
我已经找到了Split(';')
函数的示例,但我认为无法将拆分值分配给不同的数组。
有没有办法使用/不使用split()函数来执行此提取?
在此先感谢您的帮助。
答案 0 :(得分:1)
执行此操作的方法多种多样,您可以使用Regex来分隔每个项目并使用Lambda函数。
您可以做一些更基本的事情,例如处理下面的示例:
string s = "10;155.4587;0.01";
string[] a = new String[1];
string[] b = new String[1];
string[] c = new String[1];
string[] z = s.Split(';');
for(int i=0; i< z.Length; i++)
{
switch(i)
{
case 0:
a[0] = z[i];
break;
case 1:
b[0] = z[i];
break;
case 2:
c[0] = z[i];
break;
}
}
Console.WriteLine(a[0] + ' ' + b[0] + ' ' + c[0]);
上面的示例说明了如何操作元素,但缩放比例不够理想,您可能希望使用lambdas进行第一个注释,以寻求匿名路线(请参阅mukesh kudi的回答)。
答案 1 :(得分:1)
编辑 要仅添加一个列表视图项,请使用:
var s = "10;155.4587;0.01";
var values = s.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
var listViewItem = new ListViewItem(values[0]);
listViewItem.SubItems.Add(values[1]);
listViewItem.SubItems.Add(values[2]);
listView1.Items.Add(listViewItem);
假设您有多个字符串填充listBox,请尝试:
ListView listView1 = new ListView();
listView1.Bounds = new Rectangle(new Point(10, 10), new Size(300, 200));
listView1.View = View.Details;
listView1.GridLines = true;
listView1.Columns.Add("TD");
listView1.Columns.Add("AD");
listView1.Columns.Add("CT", -2);
var sValues = new string[] { "10;155.4587;0.01", "11;156.4587;0.02", "12;157.4587;0.03" };
var values = sValues.Select(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
.Select(x =>
{
var listViewItem = new ListViewItem(x[0]);
listViewItem.SubItems.Add(x[1]);
listViewItem.SubItems.Add(x[2]);
return listViewItem;
});
listView1.Items.AddRange(values.ToArray());
答案 2 :(得分:0)
您可以在linq的帮助下获得此信息...
string s = "10;155.4587;0.01";
var arrList = s.Split(';').Select(x => new string[] { x }).ToArray();
此处arrList包含三个数组。但我不确定这对您有什么帮助。如果要将此结果与ListView绑定,则必须遍历此集合并获取每个数组值并绑定到Listview。您可以通过遍历索引的单个数组来做到这一点。
答案 3 :(得分:0)
假设输入字符串数组...
string[] a1 = new string[] {
"10; 155.4587; 0.01",
"20; 255.4587; 0.02",
"30; 355.4587; 0.03",
};
List<string> r1 = new List<string>();
List<string> r2 = new List<string>();
List<string> r3 = new List<string>();
foreach (string t1 in a1)
{
string[] t2 = t1.Split(";");
r1.Add(t2[0]);
r2.Add(t2[1]);
r3.Add(t2[2]);
}
答案 4 :(得分:0)
感谢所有帮助。 在@Captain Wibble的建议下,我成功地解码了回复并添加到Listview项。
这是我为遇到同样麻烦的人所做的; 首先,我添加了数据包“ \ r \ n”
10; 12.2345; 0.01 \ r \ n
我曾经用过
serial.ReadLine()
接收输入数据的功能。 将数据解码并存储到我使用的listview对象中;
var s = text;
string[] a = new String[3];
//string[] b = new String[1];
//string[] c = new String[1];
string[] z = s.Split(';');
for (int i = 0; i < z.Length; i++)
{
switch (i)
{
case 0:
a[0] = z[i];
break;
case 1:
a[1] = z[i];
break;
case 2:
a[2] = z[i];
break;
}
}
itm = new ListViewItem(a);
listView5.Items.Add(itm);