繁体   English   中英

从.txt文件回车?

[英]carriage return from .txt file?

我在 ESP8266 上有 C 代码,将传感器数据存储在 SD 卡上的 a.txt 文件中,每行一个条目。 保存用的function:(部分删了)

    if ((lat > 0) && (lng > 0) && (day > 0)){
      snprintf(msg2, sizeof(buffer),
                   "%.6f,%.6f,"
                   "%0d-%02d-%0d,%02d:%02d:%02d,%.2f,%0d,%0d",
                   lat, lng, year, month, day, hour, minute, second, temperature, ID, button_state);
  
      dataString = String(msg2);
      filename = "test.txt";
      
      File dataFile = SD.open(filename, FILE_WRITE);
      if (dataFile) {
        dataFile.println(dataString);
        dataFile.close();
      }
    }
                 
  }
}

当它有 wifi 时,存储的数据通过 MQTT 发送,一次一行。 发送的function:(部分删除)

void load(){
      File datafile = SD.open(filename, FILE_READ);
    while (datafile.available() != 0){
      Serial.println("Reading part 2");
      holder = datafile.readStringUntil('\n');

      snprintf(msg2, sizeof(buffer),
                 "%.6f,%.6f,"
                 "%0d-%02d-%0d, %02d:%02d:%02d, %.2f, %d, %d",
                 lat, lng, year, month, day, hour, minute, second, temperature, ID, button_state);
      client.publish(topic3, holder);    
    }
    datafile.close();
  }
  
}

(不幸的是,这是一个不起作用的旧版本代码,因为我们在将 holder 变量转换为 char 数组时遇到了麻烦)

然后我有一个 python 脚本订阅 MQTT 主题,获取消息,将其拆分为一个列表,因此每条数据都可以正确存储在 MySQL 数据库中。

当我在 python 脚本中看到打印的消息时,将回车“\r”添加到行尾。 这会扰乱我的 python 脚本,因为数据库只需要一个 int。 所以我的问题是,回车从哪里来? 我有什么选择可以确保它没有添加到消息中? 我认为是从数据存储在 SD 卡中的时候开始的,因为数据每次都存储在一个新行中。 虽然,如果我使用像 MQTT Explorer 这样的 MQTT 客户端,回车是不可见的。

我知道我可以在 python 脚本中删除它,但我不认为这是一个可持续的解决方案。 我想知道它为什么来,它来自哪里,以及是否有可能确保它根本不发送到 MQTT。

数据示例:

82.120003,69.159116,2021-12-7,13:08:52,23.90,1,0\r
86.120036,23.159058,2021-12-7,13:08:57,23.90,1,0\r
13.120042,10.159045,2021-12-7,13:09:02,23.90,1,0\r
26.120035,84.159073,2021-12-7,13:09:07,23.90,1,0\r

(纬度、经度、日期、时间、温度和两种状态)

Serial.println()通常将一行文本作为字符串打印到控制台并附加一个换行符以确保对Serial.println()的下一次调用从新行开始。

如果您改为使用Serial.println()写入文件,则换行符仍然存在,导致文件的任何解析仍然会在之后拾取它。

如果您想将文件发送到没有换行符的不同平台,您可以使用Serial.print() ,它与Serial.println()具有相同的行为,只是它省略了换行符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM