初心者によるメモ
fscanfにおいて,%sは空白文字(スペース,改行,タブ,改ページ…)で自動的に区切られる.
カンマは文字列の一部として読み込んでしまうので,カンマで区切られた文字列を読みこむときには%[^,]を用いる.
fscanf(fp, "%[^,],&[^,],%s", buf1, buf2, buf3);
(行末はカンマでなく改行で区切られる点に注意)
sample.csv
label1,label2,label3
0.1,1.5,1.7
0.2,1.7,2
0.3,2.1,2.6
read_sample.c
#include <stdio.h>
int main(){
FILE *fp;
char *fname = "sample.csv";
int ret;
char buf[3][10];
double data[3];
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}
printf("\n");
fscanf(fp, "%[^,],%[^,],%s", buf[0], buf[1], buf[2]);
printf("%s %s %s\n",buf[0], buf[1], buf[2]);
while( (ret=fscanf(fp, "%lf,%lf,%lf", &data[0], &data[1], &data[2])) != EOF){
printf("%lf %lf %lf\n", data[0], data[1], data[2]);
}
printf("\n");
fclose( fp );
}
出力結果
label1 label2 label3
0.100000 1.500000 1.700000
0.200000 1.700000 2.000000
0.300000 2.100000 2.600000