【发布时间】:2012-06-29 10:20:31
【问题描述】:
谁能告诉我如何从这个输出中以一种简单的方式将以下信息提取到一个变量中。
输出:
AT+CMGL="ALL"
+CMGL: 0,"REC READ","+40728072005",,"12/06/29,13:04:26+12"
password,1,ON
我想从上面的输出中提取一些信息,如下所示:
msisdn="+40728072005"
passwd="password"
itemno="1"
command="ON"
--
string split = ",";
string[] substrings = Regex.Split(buff, split);
foreach (string match in substrings)
{
Console.WriteLine("'{0}'", match);
}
图像-> [1]:http://i.stack.imgur.com/zl6Nj.png
有没有办法从一开始就排除不需要的输出? 就像 grep -v,我对 C# 不是很熟悉。
到目前为止,我已经到了这一点:
string split = ",";
string split1 = "\"";
string split2 = "OK";
string[] substrings = Regex.Split(buff, split);
string[] substrings1 = Regex.Split(substrings[2], split1);
Console.WriteLine(substrings1[1]);
string[] substrings2 = Regex.Split(substrings[5], split1);
Console.WriteLine(substrings2[1]);
Console.WriteLine(substrings[6]);
string[] substrings3 = Regex.Split(substrings[7], split2);
Console.WriteLine(substrings3[0]);
不过,这是通过拆分字符串来完成的,因为我知道消息格式。
【问题讨论】:
-
您可以寻找现有的 CSV 解析器。框架本身不包含一个,但我敢肯定有很多开源的。
-
我尝试了正则表达式,但没有成功。拆分文本并仅检索我需要的数据是一种更简单的方法吗?
-
查看正则表达式教程 - 例如:msdn.microsoft.com/en-us/library/ms228595%28v=vs.100%29.aspx
-
取决于您如何定义“更简单的方式”。在代码中,没有比单个正则表达式更简单的方法了。然而,在大脑中......显示您尝试过但没有成功的正则表达式。
标签: c# serial-port buffer