Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何相应地捕获数据_C#_String - Fatal编程技术网

c#如何相应地捕获数据

c#如何相应地捕获数据,c#,string,C#,String,目前,我正在从串行端口接收数据字符串(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++

目前,我正在从串行端口接收数据字符串(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
    
    问题是:

  • 这只捕获了第四个传入数据,其余数据丢失。。我知道我应该添加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持久性放在一个单独的线程上,这样就不会阻止串行端口读取,否则可能会丢失数据

    您可以尝试进行数据记录

  • 我需要将所有传入的数据捕获到一个txt文件中
  • 然后文件需要保持打开状态,对于RxString的每条记录,您需要写入打开的流

  • 对于“感测”的4个相同数据,我需要对数据的格式进行一些编辑,例如只记录没有时间戳的数据
  • 您的if/else逻辑似乎正常,但流编写器除外,它经常打开和关闭

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


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

    使用
    文件。AppendAllText(…)
    比在流中乱搞要干净得多。@Sachu不。。有什么建议吗?@Sachu一枪?Rxstring实际上代表1行tho..@Sachu oh。。我是通过串口接收的。。该端口将向sys提供data@Enigmativity你是说这个?AppendAllText(“C:\Users\acer\Documents\Data3.txt”,time+“”+RxString+“\r\n”);使用
    File.AppendAllText(…)
    比在流中乱搞要干净得多。@Sachu没有。。有什么建议吗?@Sachu一枪?Rxstring实际上代表1行tho..@Sachu oh。。我是通过串口接收的。。该端口将向sys提供data@Enigmativity你是说这个?AppendAllText(“C:\Users\acer\Documents\Data3.txt”,time+“”+RxString+“\r\n”);