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
        }

我期望的是:

  1. 我需要将所有传入的数据捕获到一个txt文件中。

  2. 对于"感测"的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

问题是:

  1. 这只捕获了第4个传入数据,其余数据丢失。。我知道我应该添加streamwriter代码,但当我试图将它们复制并粘贴到第一个if-else循环中时,系统停止运行。

  2. 如果我把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
        }

c#如何相应地捕获数据

  1. 我需要将所有传入的数据捕获到一个txt文件中

然后,文件需要保持打开状态,对于RxString的每一条记录,都需要写入打开的流;

  1. 对于"感测"的4个相同数据,我需要对数据的格式进行一些编辑,比如只记录没有时间戳的数据

除了流写入程序之外,if/else逻辑似乎还可以,因为它经常打开和关闭。

IO进程非常昂贵,打开/关闭/刷新会消耗CPU时间。建议将IO持久性放在一个单独的线程上,这样你的串行端口读取就不会被阻止,否则你可能会丢失数据。

您可以尝试使用log4net进行数据记录。