void make_cart() { CART cart = {}; // クリア // 以下2行は共通 cart.person_number = 0; cart.prev_station_time = cart.next_station_time = standard_time; cart.cart_speed = default_cart_speed; #if 1 FILE *fp; const char *fname = "cart_info.csv"; char name[10]; int line, station; char direction[10]; double speed; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); exit(-1); } /* fscanf()やscanf()関数には%dや%sなどの、 変換文字(変換仕様)と言われる指定方法があります。 その中に、%[^...] という変換文字があり、カッコ内の文字以外を読み込むという意味です。 つまり、%[^abc] の場合は、「abc」以外の文字を読み込むという指定が出来ます。 これを、CSVファイル読み込みにも利用してみます。 */ int ret; int cart_number = 0; // 1行ステップ、捨て行 char dummy_line[100]; fgets( dummy_line, sizeof(dummy_line), fp); while((ret = fscanf( fp, "%[^,],%d,%d,%[^,],%lf", name, &line, &station, direction, &speed )) == 5 ){ printf("ret = %d: %s %d %d %s %lf \n", ret, name, line, station, direction, speed ); cart.number = cart_number++; strcpy(cart.name, name); cart.orig_station.line_num = cart.prev_station.line_num = line; cart.orig_station.station_num = cart.prev_station.station_num = station; if (strcmp(direction, "UP") == 0){ cart.direction = UP; cart.area = station; } else if (strcmp(direction, "DOWN") == 0){ cart.direction = DOWN; cart.area = station - 1; } else{ printf("%s\n",direction); printf("stop for error\n"); exit(0); } cart.cart_speed = speed; add_cart(&cart); } fclose( fp ); #endif }