とりあえず,原始的に(?) 1文字ずつ読み込むような処理を考えてみてはどうでしょうか.
ファイルから1文字取ってきて,
カンマじゃなかったらバッファにため込む.
カンマだったら,その直前までにバッファにたまった内容が1個の数値を表すハズだから…
みたいな.
仮に何かしらの意味でより{かっこいい(?),効率的(?),etc}な実装形態を目指したいのだとしても,まずはある程度動く単純なのを作ってから→それを足掛かりにして改造なりしていけば良いのではないでしょうか.
C
1#define N (256)
2#define MAX_WORD_LENGTH (64)
3
4//文字列を double に解釈する作業.
5double CvtWordToDouble( const char *Word )
6{
7 //※
8 //この実装では「解釈できない」文字列が来た場合のことを何も考えずに,
9 //単に atof を使う.
10 //
11 double d = atof( Word );
12 printf( "[%s] -> %f\n", Word, d );
13 return d;
14}
15
16//main
17int main( int argc, const char *argv[] )
18{
19 double f[N] = {};
20 int nReadValue = 0;
21 {
22 const char fname[] = "data.txt";
23 FILE *fp = fopen(fname, "r");
24 if (fp == NULL)
25 {
26 printf("%s file not open!\n", fname);
27 return -1;
28 }
29
30 int WordLength = 0;
31 char Word[MAX_WORD_LENGTH] = { 0 }; //バッファ
32 int c;
33 while( (c = fgetc(fp)) != EOF ) //1文字ずつ読む
34 {
35 if( c == ',' )
36 {//カンマが来たなら現在のバッファの中身が1つの数値を表すハズ
37 Word[WordLength] = '\0';
38 f[nReadValue++] = CvtWordToDouble(Word);
39 WordLength = 0;
40 }
41 else
42 {//バッファにためる
43 Word[WordLength++] = c;
44 if( WordLength >= MAX_WORD_LENGTH )
45 {
46 printf( "Unexpected Input\n" );
47 return -1;
48 }
49 }
50 }
51
52 fclose(fp);
53
54 if( WordLength > 0 ) //行末の要素に対する処理
55 {
56 Word[WordLength] = '\0';
57 f[nReadValue++] = CvtWordToDouble(Word);
58 }
59 }
60
61 printf( "%d values read.\n", nReadValue );
62 return 0;
63}