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

时间:2013-09-02 13:37:51

标签: c# serial-port

我正在尝试从串口读取数据,并通过c#GUI将其存储在.csv文件中。 我的数据包格式如下所示:

标头字节|长度|输入|数据|尾巴字节

所以有两种类型的数据

标头字节|长度|输入A |来自传感器1的数据(2字节)|来自传感器2的数据(2字节)|来自传感器3的数据(2字节)|来自传感器4的数据(2字节)|来自传感器5的数据(2字节)|来自传感器1的数据(2个字节).........等等(直到达到数据包长度)|尾字节

另一种类型的格式为

标头字节|长度| B型|来自Accelerometer1 x(1字节)|的数据来自Accelerometer1y(1字节)|的数据来自Accelerometer1z的数据(1字节)|来自Accelerometer2的数据x(1字节)|来自Accelerometer2y的数据(1字节)|来自Accelerometer2z的数据(1字节)|来自Accelerometer3 x(1字节)|的数据来自Accelerometer3y的数据(1字节)|来自Accelerometer3z的数据(1字节)|来自Accelerometer1x(1字节)的数据......等等(直到达到数据包长度)|尾字节

现在问题是将它们中的每一个存储在csv文件中,使用不同的颜色,如

Col1(来自传感器1的数据)| Col2(来自传感器2的数据)| Col3(来自传感器3的数据)| Col4(来自传感器4的数据)| Col5(来自传感器5的数据)| Col6(来自Accelerometer1x的数据)| Col7(来自Accelerometer1y的数据)| Col8(来自Accelerometer1z的数据)| Col9(来自Accelerometer2x的数据)| Col10(来自Accelerometer2y的数据)| Col11(来自Accelerometer2z的数据)| Col12(来自Accelerometer3x的数据)| Col13(来自Accelerometer3y的数据)| Col14(来自Accelerometer3z的数据)|

Col1(来自传感器1的数据的下一个数据)| Col2(来自传感器2的数据的下一个数据)| Col3(来自传感器3的数据的下一个数据)| Col4(来自传感器4的数据的下一个数据)| Col5(下一个来自传感器5)的数据| Col6(来自Accelerometer1x的数据的下一个数据)| Col7(来自Accelerometer1y的数据的下一个数据)| Col8(来自Accelerometer1z的数据的下一个数据)| Col9(来自Accelerometer2x的数据的下一个数据)| Col10(来自Accelerometer2y的数据的下一个数据)| Col11(来自Accelerometer2z的数据的下一个数据)| Col12(来自Accelerometer3x的数据的下一个数据)| Col13(来自Accelerometer3y的数据的下一个数据)| Col14(来自Accelerometer3z的数据) 等等...... ..

所以我现在尝试仅针对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());  

按照我编程的方式,你必须明白我是这个领域的新手!  我并不惊讶地收到存储在一个coloumn中的垃圾数据。 我只是想知道我可以使用哪种方法以及我在哪里犯错误。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您编写字符串的方式似乎有些问题。

首先,您要在每个拆分中添加一条换行数据。您希望将它们作为逗号分隔的字符串附加。

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

尝试以下方法:

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

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