我对C#一点没接触过,现写了个socket的网络端口监听,实现了读取我这里的GPRS模块发送的数据并显示。现在需要把收到的数据:<DB31 A26.0,B92.6,C26.0,D00.0,E00612.9,I00.1,JNNE,O00.0> 进行处理,然后输出如下的格式:
设备号: DB31
空气温度: 26.0 oC
空气湿度: 92.6 hPa
土壤温度: 26.0 oC
土壤水分: 00.0
光照度: 00612.9 lx
风速: 00.1 m/s
风向: NNE
日雨量: 00.0 mm
收到的数据A代表空气温度,B代表湿度,依次类推,后面的数字就是对应的数据大小, (由于发帖不能发特殊符上述中oC 代表摄氏度)
使用的平台是VS。
望大神们指教,如果大神们时间给代码的话,也希望给我个提示,比如使用什么语句实现,因为实在对C#不熟悉。
抱拳!
------解决思路----------------------
假设你已经收到了 string 消息,那么可以写
public class GPS
{
public string 设备号;
public float 空气温度;
public string 空气湿度;
public string 土壤温度;
public string 土壤水分;
public string 光照度;
public string 风速;
public string 风向;
public string 日雨量;
public void Parse(string s)
{
var 中间 = s.Split('<')[1].Split('>')[0];
var 数据 = 中间.Split(new char[] { ',', ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
设备号 = 数据[0];
for (var i = 1; i < 数据.Length; ++i)
{
var d = 数据[i];
switch (d[0])
{
case 'A':
空气温度 = float.Parse(d.Substring(1));
break;
case 'J':
风向 = d.Substring(1);
break;
}
}
}
}
例如可以这样转换
var s = " <DB31 A26.0,B92.6,C26.0,D00.0,E00612.9,I00.1,JNNE,O00.0>这里是一些说明";
var g = new GPS();
g.Parse(s);
------解决思路----------------------
可以这样写
var s = "<DB31 A26.0,B92.6,C26.0,D00.0,E00612.9,I00.1,JNNE,O00.0>";
var dict = new Dictionary<char, string[]>();
dict.Add('A', new string[] { "空气温度", "℃" });
dict.Add('B', new string[] { "空气湿度", "hPa" });
dict.Add('C', new string[] { "土壤温度", "℃" });
dict.Add('D', new string[] { "土壤水分", "" });
dict.Add('E', new string[] { "光照度", "lx" });
dict.Add('I', new string[] { "风速", "m/s" });
dict.Add('J', new string[] { "风向", "" });
dict.Add('O', new string[] { "日雨量", "mm" });
s = s.Trim(new char[] { '<', '>' });
var res = new List<string>() { string.Format("{0,-12}{1}", "设备号",s.Substring(0, 10)) };
foreach (var c in s.Substring(10).Split(','))
{
res.Add(string.Format("{0,-12}{1}{2}", dict[c[0]][0], c.Substring(1), dict[c[0]][1]));
}
Console.WriteLine(string.Join("\r\n", res));
