C语言 在Arduino中从sdcard中的文本文件中分割整数字符串



我有一个。txt文件加载到SD卡中,其中包含:

SampleTime: 100
SampleInterval : 1000
Phone: 91987654331

我正在使用readStringUntil(':');在Arduino IDE,但它读取整个内容在一起,但我想分割字符串和整数,并将其存储在不同的变量。我想知道如何将其拆分并存储在不同的变量中。下面是我的代码:

void setup() {
Serial.begin(9600);
if (SDfound == 0) {
if (!SD.begin(4)) {
Serial.print("The SD card cannot be found");
while(1);
}
}
SDfound = 1;
printFile = SD.open("consta.txt");
if (!printFile) {
Serial.print("The text file cannot be opened");
while(1);
}
while (printFile.available()) {
buffer = printFile.readStringUntil(':');
Serial.println(buffer); //Printing for debugging purpose         
//do some action here
}

您可以考虑用sscanf():

解析每一行
  • 见:https://cplusplus.com/reference/cstdio/sscanf/

下面是一个示例实现,说明如何使用sscanf()解析您的行(为了简单起见,我忽略了SD卡,只提供手动c字符串字面量):

void setup() {
Serial.begin(9600);
char testline_1[] = "SampleTime: 100";
char testline_2[] = "SampleInterval: 1000";
char testline_3[] = "Phone: 91987654331";
// Display initial inputs
Serial.println("===== Initial Inputs =====");
Serial.println(testline_1);
Serial.println(testline_2);
Serial.println(testline_3);
Serial.println();
// Parse data
int sample_time;
int sample_interval;
char phone_number[20];
sscanf(testline_1, "%*s %i", &sample_time);
sscanf(testline_2, "%*s %i", &sample_interval);
sscanf(testline_3, "%*s %s", phone_number);
// Display parsed data
Serial.println("===== Parsed Data =====");
Serial.print("sample_time     = "); Serial.println(sample_time);
Serial.print("sample_interval = "); Serial.println(sample_interval);
Serial.print("phone_number    = "); Serial.println(phone_number);
Serial.println();
}
void loop() {
}

这是输出到串行监视器的内容,演示了输入的成功解析:

===== Initial Inputs =====
SampleTime: 100
SampleInterval: 1000
Phone: 91987654331
===== Parsed Data =====
sample_time     = 100
sample_interval = 1000
phone_number    = 91987654331

您可以使用strtok()来分割字符串:

// let say buffer = "Ahmed:2000:"
// using ':' as split character
char *value = strtok(buffer, ":");
// now value have the first word before ':' ----> Ahmed
value = strtok(NULL, ":");
//now value contain the second word ----> "2000" as string

然后使用atoi()将字符串转换为int:

int number = atoi(value);

最新更新