CSVファイル:数値や文字列が『,』(カンマ)で区切られているファイルです。
これ、実は数値についてはfscanfの普通の使い方でいけます。
ただ、文字列については問題が起きます。
読み込むファイルがこうだとします。
sample.csv
ID1,1,11,1.02,1.12ID2,2,21,2.20,2.12ID3,3,31,3.02,3.21
コードはこういうふうになります。
#include <stdio.h>int main(void){FILE *fp;char *filename = "sample.csv";char s[100];int ret, n1, n2;float f1, f2;fp = fopen( filename, "r" );if( fp == NULL ){printf( "%sファイルが開けません¥n", filename );return -1;}while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){printf( "%s %d %d %f %f", s, n1, n2, f1, f2 );}fclose( fp );return 0;}
この出力は、こうなります。
ID1 1 11 1.020000 1.120000ID2 2 21 2.200000 2.120000ID3 3 31 3.020000 3.210000
僕がずっと疑問なのが、While文の中で
printf( "%s %d %d %f %f", s, n1, n2, f1, f2 );
の部分で改行の\nをいれていないのに改行されていることです。
めちゃくちゃ不思議です。
これは僕の環境だから起こるのかと思っていたんですけど、そうでもないようです。