C
CSV
fscanf

CのfscanfによるCSV(カンマで区切られたファイル)の読み込みメモ

More than 3 years have passed since last update.

初心者によるメモ

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