C#从串行端口读取数据并将其存储在不同列的csv中
我试图从串口读取数据,并通过c#GUI将其存储在.csv文件中。 我的数据包格式如下所示: 头字节|长度|类型|数据|尾字节 所以有两种类型的数据 报头字节|长度|类型A |来自传感器1的数据(2字节)|来自传感器2的数据(2字节)|来自传感器3的数据(2字节)|来自传感器4的数据(2字节)|来自传感器5的数据(2字节)|来自传感器1的数据(2字节)……等等(直到达到数据包长度)|尾部字节 另一种类型有一种格式 标题字节|长度|类型B |来自加速度计的数据1x(1字节)|来自加速度计的数据1x(1字节)|来自加速度计的数据1x(1字节)|来自加速度计的数据2x(1字节)|来自加速度计的数据2x(1字节)|来自加速度计的数据1x(1字节)|来自加速度计的数据1x(1字节)|来自加速度计的数据(1字节)|来自加速计的数据1x(1字节)…等等(直到达到数据包长度)|尾字节 现在的问题是将它们存储在csv文件中的不同列中,如 Col1(来自传感器1的数据)| Col2(来自传感器2的数据)| Col3(来自传感器3的数据)| Col4(来自传感器4的数据)| Col5(来自传感器5的数据)| Col6(来自加速度计1x的数据)| Col7(来自加速度计1y的数据)| Col8(来自加速度计1z的数据)| Col9(来自加速度计2x的数据)12410(来自加速度计2y的数据)| Col11(来自加速度计2z的数据)12412(来自加速度计3X的数据)| Col13(来自加速度计3Y的数据)| Col14(来自加速度计3Z的数据)| Col1(来自传感器1的下一个数据)| Col2(来自传感器2的下一个数据)| Col3(来自传感器3的下一个数据)| Col4(来自传感器4的下一个数据)| Col5(来自传感器5的下一个数据)| Col6(来自加速度计1x的下一个数据)| Col7(来自加速度计1y的下一个数据)| Col8(来自加速度计1Z的下一个数据)| Col9(来自加速度计2X的下一个数据)| Col10(来自加速度计2Y的下一个数据)| Col11(来自加速度计2Z的下一个数据)| Col12(来自加速度计3X的下一个数据)| Col13(来自加速度计3Y的下一个数据)| Col14(来自加速度计3Z的数据) 等等 因此,我目前仅尝试对A型进行测试,如下所示: 我定义了一个列表和一个数组C#从串行端口读取数据并将其存储在不同列的csv中,c#,serial-port,C#,Serial Port,我试图从串口读取数据,并通过c#GUI将其存储在.csv文件中。 我的数据包格式如下所示: 头字节|长度|类型|数据|尾字节 所以有两种类型的数据 报头字节|长度|类型A |来自传感器1的数据(2字节)|来自传感器2的数据(2字节)|来自传感器3的数据(2字节)|来自传感器4的数据(2字节)|来自传感器5的数据(2字节)|来自传感器1的数据(2字节)……等等(直到达到数据包长度)|尾部字节 另一种类型有一种格式 标题字节|长度|类型B |来自加速度计的数据1x(1字节)|来自加速度计的数据1x(
List<char> list_data = new List<char>();
现在我有了如下列表中的数据
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.Count-1];
store_array=list_data.ToArray();
字符串文件路径=@“D:\data\test\u no_8.csv”;
StringBuilder sb=新的StringBuilder();
string char\u array\u to\u str=新字符串(存储\u数组);
string[]spilt_value=char_array_to_str.Split('*');
对于(int index=0;index
通过我编程的方式,你一定知道我对这个领域是全新的!
毫不奇怪,我收到的垃圾数据都存储在一个列中。
我只是想知道我可以使用什么样的方法,以及我在哪里犯了错误。提前感谢您的帮助。您在编写字符串时似乎遇到了一些问题 首先,您要在输入数据的每个分割中追加一行。您希望将它们作为逗号分隔的字符串追加 另一件事是你算错了。你会忽略输入字符串数组中的最后一个对象 请尝试以下操作:
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());
char[]store_array=new char[list_data.Length-1];
store_array=list_data.ToArray();
字符串文件路径=@“c:\temp\test\u no_8.csv”;
StringBuilder sb=新的StringBuilder();
string char\u array\u to\u str=新字符串(存储\u数组);
string[]spilt_value=char_array_to_str.Split('*');
对于(int index=0;index
这将把数据写入一行,用逗号分隔。您用“*”分隔但似乎您打算用逗号分隔。您将得到一列,因为您正在读取一个字节,然后添加分隔符-稍后您将根据此分隔符拆分为几行,因此每行一个字节。首先,我怀疑您是否只是想将字节转换为字符-调试为列表数据,并检查在这里,你所投入的是你想要的。这是场上双关语的道具。我从中得到了乐趣。
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());