最近因为工程需要,需要在支持FATFS文件系统的SD卡上创建.CSV文件,用于存储现场采集的传感器数据,专门研究了一下.CSV格式文件的读写。
1、什么是.CSV格式的文件
就是数据项之间用逗号隔开的文件。例如: "aa , bb , cc , dd "。
.CSV格式的文件可以直接用EXCEL电子表格软件打开,上述数据在EXCEL的存储形式参见下图:
2、如果想按照如下电子表格中存储格式该如何处理呢?
解决方法:
在每行的结尾处添加\r\n。
例如:
第一次写如下字符串 "aa , bb , cc , dd \r\n"
第二次写如下字符串 "ee , ff , gg , hh \r\n"
C语言源程序如下:
char test1_string[100] = "aa , bb , cc , dd \r\n";
char test2_string[100] = "ee , ff , gg , hh \r\n";
void Test(void)
{
FRESULT result;
FATFS fs;
FIL file;
DIR DirInf;
uint32_t bw;
uint32_t fil_size;
/* 挂载文件系统 */
result = f_mount(FS_SD, &fs); /* Mount a logical drive */
if (result != FR_OK)
{
//printf("挂载文件系统失败 (%d)\r\n", result);
return ;
}
/* 打开根文件夹 */
result = f_opendir(&DirInf, "/"); /* 如果不带参数,则从当前目录开始 */
if (result != FR_OK)
{
//printf("打开根目录失败 (%d)\r\n");
/* 卸载文件系统 */
f_mount(FS_SD, NULL);
return ;
}
/* 打开文件 */
result = f_open(&file, "TEST.csv", FA_OPEN_ALWAYS | FA_WRITE);
if (result == FR_OK)
{
fil_size = f_size(&file);
result = f_lseek(&file,fil_size);
result = f_write(&file, test1_string , strlen(test1_string), &bw);
result = f_write(&file, test2_string , strlen(test2_string), &bw);
}//if (result == FR_OK)
/* 关闭文件*/
f_close(&file);
/* 卸载文件系统 */
f_mount(FS_SD, NULL);
}