如何从文件中格式化读取所需数据
预置条件:
文件中存放了一定量的数据,他们有些是按照格式存储的,有些则不是
i.正常的格式是: 2013年12月13:12分张三收入1000美金
2013年12月13:12分王老五支出200人民币
ii.异常格式随意
每条数据占据一行
需求
现在需要把年/月/时间/人名/支出or收入/具体数额 全部读取出来
尝试了fscanf,貌似无法处理变长的格式(名字部分是变长的)。如果使用fgetc一个个读取的话,感觉已经完全不可控了。目前想到的办法是:分别用fscanf去尝试(人名长度变化范围有限),根据fscanf返回的值来判断是否读取成功。如果均读取失败,则表明该记录非法,需要跳过该记录。
各位大大,有什么更好的办法吗?
[解决办法]
可以试试用正则表达式
[解决办法]
用fgets读取,然后读出来之后再处理。赞成楼上用正则表达式的想法。
如果是MFC的话可以用CStdioFile进行按行读取,也可以考虑下文件的串行化。
不过文件的串行化我也不是很熟悉,不知道能不能满足你的要求
[解决办法]
为什么没有日期信息?
[解决办法]
//in.txt:
//2013年12月13:12分张三收入1000美金
//2013年12月张三收入1000美金
//2013年12月13:12分支出200人民币
//2013年12月13:12分王老五支出200人民币
#include <stdio.h>
#include <string.h>
#include <locale.h>
FILE *f;
char ln[80];
int Y,M,H,m,d;
char n[7];
char q[7];
int main() {
setlocale(LC_ALL,"chs");
f=fopen("in.txt","r");
if (NULL==f) {
printf("Can not open file in.txt!\n");
return 1;
}
while (1) {
if (NULL==fgets(ln,80,f)) break;
if (7==sscanf(ln,"20%2d年%d月%d:%d分%6s收入%d%6s",&Y,&M,&H,&m,n,&d,q)
[解决办法]
7==sscanf(ln,"20%2d年%d月%d:%d分%4s收入%d%6s",&Y,&M,&H,&m,n,&d,q)) {
printf("20%d年%d月%d:%d分%s收入%d%s\n",Y,M,H,m,n,d,q);
} else
if (7==sscanf(ln,"20%2d年%d月%d:%d分%6s支出%d%6s",&Y,&M,&H,&m,n,&d,q)
[解决办法]
7==sscanf(ln,"20%2d年%d月%d:%d分%4s支出%d%6s",&Y,&M,&H,&m,n,&d,q)) {
printf("20%d年%d月%d:%d分%s支出%d%s\n",Y,M,H,m,n,d,q);
}
}
fclose(f);
return 0;
}
//2013年12月13:12分张三收入1000美金
//2013年12月13:12分王老五支出200人民币
//