SPIFFS 将 return 键保存到字符串中
SPIFFS save return key into string
在我的 ESP32 上使用 SPIFFS 逐行读取 .txt 文件时,它还会保存 return 键,有没有办法防止这种情况?
阅读功能:
String line_one, line_two;
void readfiles() {
char buffer[64];
int i = 0;
File file0 = SPIFFS.open("/0.txt", "r");
while (file0.available()) {
int l = file0.readBytesUntil('\n', buffer, sizeof(buffer));
buffer[l] = 0;
if (i == 0) {
line_one = buffer;
}
if (i == 1) {
line_two = buffer;
}
i++;
if (i == 2){
break;
}
}
file0.close();
}
我的内容0.txt:
2020-01-01
2021-03-16
我想借助“字符串处理器”在网页上显示它们:
String processor(const String& var){
//JUST FOR EDIT
if(var == "LINE_ONE"){
return line_one;
}
else if(var == "LINE_TWO"){
return line_two;
}
网页:
<form action="/get">
Date 1: <br><input type="date" name="1_input" id="1_input" value="%LINE_ONE%"><br><br>
Date 2: <br><input type="date" name="2_input" id="2_input" value="%LINE_TWO%"><br><br><br>
<input type="submit" value="Submit">
</form>
我预计它会设置日期,但它所做的是在我的代码中在 %LINE_ONE% 之后执行 return,这样 html 页面无法显示日期。第二行有效,因为它是没有不可见 return 键的最后一行。
在这里你可以明白我的意思:
来自德国的感谢和问候!
我自己找到了答案。
它与“回车return”(/r)和“换行”(/n)有关。
Windows记事本在一行的末尾做一个 CR 然后一个 LF,所以我通过用记事本 ++ 删除 LF 并在我的代码中更改一行来解决这个错误。
来自这里:
int l = file0.readBytesUntil('\n', buffer, sizeof(buffer));
对此:
int l = file0.readBytesUntil('\r', buffer, sizeof(buffer));
(如果我删除 CR,我的 ESP32 在启动时会崩溃:“Guru Meditation Error:Core 1 panic'ed (LoadProhibited)。异常未处理。”)
在我的 ESP32 上使用 SPIFFS 逐行读取 .txt 文件时,它还会保存 return 键,有没有办法防止这种情况?
阅读功能:
String line_one, line_two;
void readfiles() {
char buffer[64];
int i = 0;
File file0 = SPIFFS.open("/0.txt", "r");
while (file0.available()) {
int l = file0.readBytesUntil('\n', buffer, sizeof(buffer));
buffer[l] = 0;
if (i == 0) {
line_one = buffer;
}
if (i == 1) {
line_two = buffer;
}
i++;
if (i == 2){
break;
}
}
file0.close();
}
我的内容0.txt:
2020-01-01
2021-03-16
我想借助“字符串处理器”在网页上显示它们:
String processor(const String& var){
//JUST FOR EDIT
if(var == "LINE_ONE"){
return line_one;
}
else if(var == "LINE_TWO"){
return line_two;
}
网页:
<form action="/get">
Date 1: <br><input type="date" name="1_input" id="1_input" value="%LINE_ONE%"><br><br>
Date 2: <br><input type="date" name="2_input" id="2_input" value="%LINE_TWO%"><br><br><br>
<input type="submit" value="Submit">
</form>
我预计它会设置日期,但它所做的是在我的代码中在 %LINE_ONE% 之后执行 return,这样 html 页面无法显示日期。第二行有效,因为它是没有不可见 return 键的最后一行。
在这里你可以明白我的意思:
来自德国的感谢和问候!
我自己找到了答案。 它与“回车return”(/r)和“换行”(/n)有关。
Windows记事本在一行的末尾做一个 CR 然后一个 LF,所以我通过用记事本 ++ 删除 LF 并在我的代码中更改一行来解决这个错误。
来自这里:
int l = file0.readBytesUntil('\n', buffer, sizeof(buffer));
对此:
int l = file0.readBytesUntil('\r', buffer, sizeof(buffer));
(如果我删除 CR,我的 ESP32 在启动时会崩溃:“Guru Meditation Error:Core 1 panic'ed (LoadProhibited)。异常未处理。”)