作者UNARYvvv (有趣生活)
看板C_and_CPP
标题Re: [问题] 关於读取档案资料的问题
时间Sun May 7 23:12:19 2006
※ 引述《ggls (藏书人)》之铭言:
: 目前需读取的资料格式举例如下
: 林口,1101,1,1000000,200000
: 台中,2101,1,1100000,300000
: 字串,字串,整数,浮点数,浮点数
: 现下使用的函式为fscanf()
: f1 = fopen("inf001.CSV","r");
: fscanf(f1,"%s%s%d%f%f",name[1],locaNO[1],&type[1],&x[1],&y[1]);
: 但是读过之前的讨论後
: 发现如果抓的是字串的话
: 要遇到空白或换行才会停止
: 也就是目前遇到的状况
: 一开始抓字串就把整列抓完了
: 逗号本来只是区隔用的符号
: 但是目前没有办法区分
: 请问有办法在逗号的地方停止
: 或是要用别的函式来处理比较好呢
: 若要用别的函式
: 翻了翻手边的书好像也没有比较好用的函式的样子
不需要找别的函式啦~原本的 fscanf 在这个问题上已经够用了
scanf 系列函式所使用的格式字串参数,有一个种用法是
%[^排除字元集]
以下一个小程式可以参考看看:
-----------------------------------------------------------
#include <stdio.h>
int main(int argc){
const char *input = "台中,2101,1,1100000,300000";
char s1[100],s2[100];
int d;
float f1,f2;
sscanf(input,"
%[^,],%[^,],%d,%f,%f",s1,s2,&d,&f1,&f2);
printf("%s\n%s\n%d\n%f\n%f",s1,s2,d,f1,f2);
return 0;
}
======
output
======
台中
2101
1
1100000.000000
300000.000000
-----------------------------------------------------------
在读档时使用的话
也只要把 sscanf(input, .....
改成你的 fscanf(f1, .....
就符合程式需求了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.70.137.117
※ 编辑: UNARYvvv 来自: 61.70.137.117 (05/07 23:17)
1F:推 drkkimo:原来可以这样子~ 05/08 00:12
2F:推 firose:这招强 ~@@ 05/08 00:38
3F:推 CodeJob:原来还有这招阿, 高手 :D 05/08 10:44
4F:→ ggls:真高手 多谢了@@ 05/08 13:27