【发布时间】:2019-07-24 13:11:17
【问题描述】:
当前尝试使用 strtok 和空格作为分隔符逐行读取文本文件中的数据,并将信息保存到不同的数组中。我使用 FatFs 库从 sd 卡读取文件。 Atm 我只尝试从该行读取前 2 个元素。
我的文本文件如下所示:
223 895 200 200 87 700 700 700
222 895 200 200 87 700 700 700
221 895 200 200 87 700 700 700
222 895 200 200 87 700 700 700
我当前的代码是这样的:
void sd_card_read()
{
char buffer[30];
char buffer2[10];
char buffer3[10];
int i=0;
int k=0;
int l=0;
int16 temp_array[500];
int16 hum_array[500];
char *p;
FIL fileO;
uint8 resultF;
resultF = f_open(&fileO, "dados.txt", FA_READ);
if(resultF == FR_OK)
{
UART_UartPutString("Reading...");
UART_UartPutString("\n\r");
while(f_gets(buffer, sizeof(buffer), &fileO))
{
p = strtok(buffer, " ");
temp_array[i] = atoi(p);
UART_UartPutString(p);
UART_UartPutString("\r\n");
p = strtok(NULL, " ");
hum_array[i] = atoi(p);
UART_UartPutString(p);
UART_UartPutString("\r\n");
i++;
}
UART_UartPutString("Done reading");
resultF = f_close(&fileO);
}
UART_UartPutString("Printing");
UART_UartPutString("\r\n");
for (k = 0; k < 10; k++)
{
itoa(temp_array[k], buffer2, 10);
UART_UartPutString(buffer2);
UART_UartPutString("\r\n");
}
for (l = 0; l < 10; l++)
{
itoa(hum_array[l], buffer3, 10);
UART_UartPutString(buffer3);
UART_UartPutString("\r\n");
}
}
输出atm是这样的:
223
0
222
0
等等。
895
0
895
0
等等。
读取一次后,它会将下一个位置的值 0 放入两个数组中,这不是我们想要的。它可能是一些基本的东西,但看不出有什么问题。
任何帮助都是有价值的!
【问题讨论】:
-
如果计算一行中的字符数(包括空格、换行符和字符串终止符),你会得到多少?它是否适合您的
buffer30 个字符的数组? -
@Someprogrammerdude 看起来我睡眠不足或需要更多咖啡。谢谢你的回答,确实是这个问题。也许我应该删除这篇文章?
-
不,我可以尝试写一个正确的答案。
标签: c microcontroller fatfs