2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2017-05-25 C/C++ で csvファイルの読み込みに、strtokを使うのに疲れた私の為に [長年日記]

/*
  出展 http://simd.jugem.jp/?eid=49
  gcc -g comma.cpp -o comma
 */
 
#include <stdio.h>
 
int main(void)
{
  FILE *fp;
  const char *fname = "comma.csv";
  char s[100];
  int ret, n1, n2;
  float f1, f2;
 
  fp = fopen( fname, "r" );
  if( fp == NULL ){
    printf( "%sファイルが開けません\n", fname );
    return -1;
  }
 
  /*
    fscanf()やscanf()関数には%dや%sなどの、
    変換文字(変換仕様)と言われる指定方法があります。
    その中に、%[^...] という変換文字があり、カッコ内の文字以外を読み込むという意味です。
 
    つまり、%[^abc] の場合は、「abc」以外の文字を読み込むという指定が出来ます。
    これを、CSVファイル読み込みにも利用してみます。
  */
 
  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;
}
 
 
#if 0
 
以下を、"comma.csv"というファイル名で保存する。
 
test01,10,11,1.0,1.1
test02,20,21,2.0,2.1
test03,30,31,3.0,3.1
 
#endif