[英]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.