我正在尝试从串口读取数据,并通过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中的垃圾数据。 我只是想知道我可以使用哪种方法以及我在哪里犯错误。在此先感谢您的帮助。
答案 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());
这应该将您的数据写入以逗号分隔的一行。