C#从串行端口读取并将其存储在不同列的csv中
本文关键字:csv 存储 串行端口 读取 | 更新日期: 2023-09-27 18:29:51
我正在尝试从串行端口读取数据,并通过c#GUI将其存储在.csv文件中。我的数据包格式如下所示:
头字节|长度|类型|数据|尾字节
因此有两种类型的数据
头字节|长度|类型A|来自传感器1的数据(2字节)|来自传感器2的数据
另一种类型具有格式
标头字节|长度|类型B |来自加速计1 x(1字节)|来自加速计1y的数据(1字节……..依此类推(直到达到数据包长度)|尾字节
现在的问题是将它们中的每一个存储在不同列的csv文件中,如
Col1(来自传感器1的数据)|Col2(来自传感器2的数据)|3(来自传感器3的数据)| Col4(来自传感器4的数据)|| Col5(来自传感器5的数据Col14(来自加速计3z的数据)|
Col1(来自传感器1的数据的下一个数据)|Col2(来自传感器2的数据的第二个数据)| Col3(来自加速计2x的数据的下一个数据)|Col10(来自加速计2y的数据的上一个数据等等…。。
所以我现在只尝试对类型A进行此操作,如下所示:我定义了一个列表和一个数组
List<char> list_data = new List<char>();
然后我在下面的函数中从数据包中提取数据并存储它
private string bytearraytohexstring(byte[] data)
{foreach (byte b in data){
//extract data.....
list_data.Add(Convert.ToChar(b));
list_data.Add('*');
}
}
现在我有了如下列表中的数据Data1*data2*data3*data4*data5*Data1*等等当我点击GUI 中的保存按钮时
char[] store_array = new char[list_data.Count - 1];
store_array = list_data.ToArray();
string filePath = @"D:'data'test_no_8.csv";
StringBuilder sb = new StringBuilder();
string char_array_to_str = new string(store_array);
string[] spilt_value = char_array_to_str.Split('*');
for (int index = 0; index < spilt_value.Length-1; index++)
sb.AppendLine(spilt_value[index]);
File.WriteAllText(filePath, sb.ToString());
通过我编程的方式,你一定已经明白,我对这个领域完全陌生!毫不奇怪,我收到的垃圾数据都存储在一个秋天里。我只想知道我可以用什么可能的方法,以及我到底在哪里犯错误。提前感谢您的帮助。
您在编写字符串时似乎遇到了一些问题。
首先,在输入数据中,每次拆分都要添加一行新行。您希望将它们附加为逗号分隔的字符串。
另一件事是你数错了。您将省略插入字符串数组中的最后一个对象。
尝试以下操作:
char[] store_array = new char[list_data.Length-1];
store_array = list_data.ToArray();
string filePath = @"c:'temp'test_no_8.csv";
StringBuilder sb = new StringBuilder();
string char_array_to_str = new string(store_array);
string[] spilt_value = char_array_to_str.Split('*');
for (int index = 0; index < spilt_value.Length; index++) {
if(index == spilt_value.Length-1) sb.Append(spilt_value[index]);
else sb.Append(spilt_value[index] + ",");
}
File.WriteAllText(filePath, sb.ToString());
这应该将数据写入用逗号分隔的一行中。