OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5765|回复: 3

Fatfs对ini文件的解析函数

[复制链接]

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-12-5
在线时间
2 小时
发表于 2015-1-26 13:28:36 | 显示全部楼层 |阅读模式
    Fatfs对ini文件的逐行解析,结果存在预定的buffer里。也可以显示在enwin等界面上。

    希望大家给出改进建议!

/**********************************************************
  ini解析函数,可滤除所有空格 TAB
  滤除空行
  丢弃缺少"="的行
  丢弃缺少"]"的类
  ZZY   2015.01
**********************************************************/

[mw_shl_code=c,true]#include "ff.h" #include "string.h" #include "stdio.h" #include "Fs_Operate.h" #include "GUI_Creat.h" FATFS fs; //必须在函数外面,栈过小[/mw_shl_code] [mw_shl_code=c,true]/****************************************[/mw_shl_code] [mw_shl_code=c,true]ini解析函数 去除所有空格 TAB 空行[/mw_shl_code] [mw_shl_code=c,true]去除无效行[/mw_shl_code] [mw_shl_code=c,true]by ZZY 2015.01[/mw_shl_code] [mw_shl_code=c,true]****************************************/[/mw_shl_code] [mw_shl_code=c,true]void ReadFileData(char* File_Des) //输入文件名 { FRESULT result; //FATFS fs; FIL file; DIR DirInf; //uint32_t bw; result = f_mount(0, fs[0]); if (result != FR_OK) { //printf("?????????????§°?(%d)\r\n", result); } result = f_opendir(&DirInf, "/"); if (result != FR_OK) { //printf("?ò???ù?????§°?(%d)\r\n", result); return; } result = f_open(&file,File_Des, FA_OPEN_EXISTING | FA_READ); if (result != FR_OK) { printf("Not a File \r\n"); return; } while (1) { //char* p = 0; char Print_buf1[20]; //文件名 char Print_buf[30]; char buf[70]; // > 30+20+1+1+?????? unsigned char i,j; unsigned char Valid_Flag = 0; if(f_gets(buf, sizeof(buf), &file)){ printf("%s", buf); //f_lseek(&file, file.fptr - strlen(buf)); memset(Print_buf,0,sizeof(Print_buf)); memset(Print_buf1,0,sizeof(Print_buf1)); if(buf[0] == ';'){ printf(" >注释\r\n*"); } else if(buf[0] == '\r' || buf[0] == '\n'){ printf(" >空行\r\n*");//???? } else if(buf[0] == '['){ for(i=1,j=0; j<sizeof(Print_buf); i++){ if(buf != ' ' && buf != ' '){ if(buf != ']' && buf != '\r' && buf != '\n' && buf != '\0') Print_buf[j++] = buf; else{ if(buf == ']') Valid_Flag = 1; //有效 break; } } } //strncpy(Print_buf, &(buf[1]), strlen(buf)-4);// []\r\n if(Valid_Flag){ printf(" >节-值为:%s", Print_buf); } else printf(" >节-值无效"); printf("\r\n*"); } else{ for(i=0,j=0; j<(sizeof(Print_buf1)); i++){ if(buf != ' ' && buf != ' '){ if(buf != '=' && buf != '\r' && buf != '\n' && buf != '\0') Print_buf1[j++] = buf; else{ if(buf == '=') Valid_Flag = 1; //有效 break; } } } for(i++,j=0; j<sizeof(Print_buf); i++){ //if(i >= sizeof(buf)) break; if(buf != ' ' && buf != ' '){ if(buf != '\r' && buf != '\n' && buf != '\0'){ Print_buf[j++] = buf; } else break; } } // p = strchr (buf,'='); // strncpy(Print_buf1,buf,p-buf); // strncpy(Print_buf, ++p, strlen(p)-2);// \r\n if(Valid_Flag ) printf(" >参数 %s 值:%s", Print_buf1,Print_buf); else printf(" >参数-值无效"); printf("\r\n*"); } //if(!i--) break; } else break; } f_close(&file); f_mount(0, 0); } /********************************************************** 打印到MULTIEDIT中 ZZY 2015.1 **********************************************************/ void ReadText(char* File_Des,WM_MESSAGE * pMsg) { FRESULT result; //FATFS fs; FIL file; DIR DirInf; WM_HWIN hWin = pMsg->hWin; //?°????±ú char buf[70]; // > 30+20+1+1+?????? result = f_mount(0, fs[0]); if (result != FR_OK) { printf("?????????????§°?(%d)\r\n", result); } result = f_opendir(&DirInf, "/"); if (result != FR_OK) { printf("?ò???ù?????§°?(%d)\r\n", result); return; } result = f_open(&file,File_Des, FA_OPEN_EXISTING | FA_READ); if (result != FR_OK) { printf("Not a File \r\n"); return; } while (f_gets(buf, sizeof(buf), &file)){ printf("%s", buf); MULTIEDIT_AddText(WM_GetDialogItem(hWin,GUI_ID_MULTIEDIT0),buf); //f_lseek(&file, file.fptr - strlen(buf)); } f_close(&file); f_mount(0, 0); } [/mw_shl_code]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-1-26 18:20:11 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-1-26 19:43:30 | 显示全部楼层
谢谢分享....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-12-5
在线时间
2 小时
 楼主| 发表于 2015-3-12 13:29:45 | 显示全部楼层
更正一个小小的漏洞:

/**********************************************************
    打印到MULTIEDIT中
    ZZY 2015.1
**********************************************************/
void ReadText(char* File_Des,WM_MESSAGE * pMsg)
{
    FRESULT result;
    //FATFS fs;

    //FIL file;    //这个一定要放在外面,否则有可能栈溢出!!!
    .....................
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表