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());  

通过我编程的方式,你一定已经明白,我对这个领域完全陌生!毫不奇怪,我收到的垃圾数据都存储在一个秋天里。我只想知道我可以用什么可能的方法,以及我到底在哪里犯错误。提前感谢您的帮助。

C#从串行端口读取并将其存储在不同列的csv中

您在编写字符串时似乎遇到了一些问题。

首先,在输入数据中,每次拆分都要添加一行新行。您希望将它们附加为逗号分隔的字符串。

另一件事是你数错了。您将省略插入字符串数组中的最后一个对象。

尝试以下操作:

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());  

这应该将数据写入用逗号分隔的一行中。