繁体   English   中英

Esp32 从文本文件中读取行,因为字符串得到错误的字词

[英]Esp32 read lines from text file as strings get wrong worder

我有一个文本文件 test1.txt:

    aaa|aaa|aaa
    bbb|bbb|bbb
    ccc|ccc|ccc
    ddd|ddd|ddd

如您所见,文件有 4 行。 我使用这段代码来读取文件的内容并将每一行作为一个单独的字符串:

#include "SPIFFS.h"
    
String file_content = "";
char VALUE [1024] = {'\0'};
     
void setup() {
  Serial.begin(9600);

  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }
    
  File file = SPIFFS.open("/test1.txt");
  if (!file) {
    Serial.println("Failed to open file for reading");
    return;
  }

  uint16_t i = 0;

  while (file.available()) {
    VALUE[i] = file.read();
    Serial.println (VALUE[i]);
    i++;
  }
  VALUE[i] ='\0';
      
  Serial.println("Raw print");
  Serial.println (VALUE); //use for debug
  Serial.println("String print");
  String myString = String(VALUE);
  Serial.println (myString);
        
  file.close();
    
  int delimiter, delimiter_1, delimiter_2, delimiter_3, delimiter_4;
  delimiter = myString.indexOf("\n");
  delimiter_1 = myString.indexOf("\n", delimiter + 1);
  delimiter_2 = myString.indexOf("\n", delimiter_1 +1);
  delimiter_3 = myString.indexOf("\n", delimiter_2 +1);
  delimiter_4 = myString.indexOf("\n", delimiter_3 +1);
    
  // Define variables to be executed on the code later by collecting information from the readString as substrings.
  String row1 = myString.substring(delimiter + 1, delimiter_1);
  String row2 = myString.substring(delimiter_1 + 1, delimiter_2);
  String row3 = myString.substring(delimiter_2 + 1, delimiter_3);
  String row4 = myString.substring(delimiter_3 + 1, delimiter_4);
   
  Serial.println("Rows print");
  Serial.println(row1);
  Serial.println(row2);
  Serial.println(row3);
  Serial.println(row4);
}
    
void loop() {}

行打印的 Output 为:

Rows print

bbb|bbb|bbb

ccc|ccc|ccc

ddd|ddd|ddd

aaa|aaa|aaa

为什么“aaa”行是最后一行而不是第一行? 基本上 delimiter_1 是“bbb”行而不是“aaa”行,delimiter_4 是“aaa”行而不是“ddd”行。

谢谢。

尝试这个:

#include <SPIFFS.h>

using namespace std;

void setup() {
  Serial.begin(115200);

  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }

  File file = SPIFFS.open("/test1.txt");
  if (!file) {
    Serial.println("Failed to open file for reading");
    return;
  }

  vector<String> v;
  while (file.available()) {
    v.push_back(file.readStringUntil('\n'));
  }
  file.close();

  for (String s : v) {
    Serial.println(s);
  }
}

void loop() {}

Output:

aaa|aaa|aaa
bbb|bbb|bbb
ccc|ccc|ccc
ddd|ddd|ddd

编辑:

如果要操作单个元素,可以使用常规的 for 循环迭代。 请参见下面的示例:

for (int i = 0; i < v.size(); i++){
  Serial.println(v[i]);
}

暂无
暂无

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

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