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|

2014-06-01 emacsによるバイナリファイルの編集

・emacsを起動する。
・M-x hexl-find-fileと入力し、バイナリモードでファイルを開く。
(すでにファイルを開いている場合は、hexl-modeでバイナリモードになります)
・普通にキー入力すると文字としてバイナリデータが置換されていきます。
・直接Hexで入力したい場合は、M-x hexl-insert-hex-charと入力すると最下段の入力バッファに入力プロンプトがでてきて、1バイト入力できる。

2017-06-01 // double の場合は"%lf"でないと値が取れない (%fにするとゼロになる)

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 
}