c#如何相应地捕获数据
本文关键字:数据 何相应 | 更新日期: 2023-09-27 17:59:23
当前,我正在从串行端口接收字符串数据(RxString)。例如
T 22 27.0
T 22 27.0
T 21 25.0
T 22 26.8
逐行。。
首先,为了进行比较,我尝试拆分字符串以提取中间的数字。
string[] number = RxString.Split(' ');
string unit = split[1];
然后我用进行比较
int count = 0;
string x = "";
if (x == unit)
{
count++;
}
else
{
count = 1;
x = unit;
}
if (count == 4)
{
StreamWriter MyStreamWriter = new StreamWriter(@"C:'Users'acer'Documents'Data3.txt", true); //True tell SW to append to file instead of overwriting
MyStreamWriter.Write(time + " " + RxString + "'r'n"); //Write time + string
MyStreamWriter.Flush();
MyStreamWriter.Close();
count = 0; //reset count
}
我期望的是:
我需要将所有传入的数据捕获到一个txt文件中。
对于"感测"的4个相同数据,我需要对数据的格式进行一些编辑,比如只记录没有时间戳的数据。
意味着如果传入数据是:
T 22 24.0
T 22 24.0
T 22 24.0
T 22 24.0
T 23 26.7
T 20 25.0
然后应该出现在我的.txt文件中的是
T 22 24.0
T 22 24.0
T 22 24.0
T 22 24.0
10:24:20 T 23 26.7
10:24 40 T 20 25.0
问题是:
这只捕获了第4个传入数据,其余数据丢失。。我知道我应该添加streamwriter代码,但当我试图将它们复制并粘贴到第一个if-else循环中时,系统停止运行。
如果我把streamwriter代码放在所有If-else/If循环之外,系统只需将所有数据捕获到txt文件中。。
有没有更好的方法来实现streamwriter功能?
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string time = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.ff");
RxString = serialPort1.ReadLine();
string[] split = RxString.Split('.'); //split RxString at '.'
string dp = split[1]; //dp contains digit behind '.'
Char c = dp[0]; //c = first decimal place
split[1] = c.ToString();
RxString = split[0] + "." + split[1]; //Re-combine Rxstring
this.Invoke(new EventHandler(DisplayText));
string[] number = RxString.Split(' ');
string unit = split[1];
if (x == unit)
{
count++;
}
else
{
count = 1;
x = unit;
}
if (count == 4)
{
StreamWriter MyStreamWriter = new StreamWriter(@"C:'Users'acer'Documents'Data3.txt", true); //True tell SW to append to file instead of overwriting
MyStreamWriter.Write(time + " " + RxString + "'r'n"); //Write time + string
MyStreamWriter.Flush();
MyStreamWriter.Close();
count = 0; //reset count
}
- 我需要将所有传入的数据捕获到一个txt文件中
然后,文件需要保持打开状态,对于RxString的每一条记录,都需要写入打开的流;
- 对于"感测"的4个相同数据,我需要对数据的格式进行一些编辑,比如只记录没有时间戳的数据
除了流写入程序之外,if/else逻辑似乎还可以,因为它经常打开和关闭。
IO进程非常昂贵,打开/关闭/刷新会消耗CPU时间。建议将IO持久性放在一个单独的线程上,这样你的串行端口读取就不会被阻止,否则你可能会丢失数据。
您可以尝试使用log4net进行数据记录。