簡體   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