void read_obj_func(input_file *input, FILE *fp){   //目的関数の読み込み
	int i;
	read_one_line(fp,input->line);    /* ファイルからデータを1行読み込む */
	/* 目的関数の’Z’および’=’を読み込む */
	input->string = strtok(input->line," ");
	assert(input->string[0]=='z'||input->string[0]=='Z');
	/* 1文字目がZでなければプログラムを終了する */
	printf("%c ",input->string[0]);
	input->string=strtok(NULL," ");   /* 引き続きスペースの前まで読み込む */
	assert(input->string[0]=='=');
	/* 次の1文字目が=でなければプログラムを終了する */
	printf("%c ",input->string[0]);
	/* 目的関数の係数を読み込む */
	for(i=1; i<=n; i++){
      input->string=strtok(NULL," ");		 /* トークンを読み込む */
      input->x_sub = read_one_token(input->string, &input->coef);
      /* 読み込んだトークンを構文解析する */
      c[input->x_sub]= input->coef;
      /* 目的関数の係数Cに代入する */
      printf("%6.2fX%d ",input->coef,input->x_sub);
   }
	/* 目的関数の符号(最大化or最小化)を読み込む*/
	input->string=strtok(NULL," ");
	if((input->string[1]=='a')||(input->string[1]=='A')){
      max_min = max;
      printf(" MAX\n");
   }else if((input->string[1]=='i')||(input->string[1]=='I')){
      max_min = min;
      printf(" MIN\n");
   }else{
		/* エラーコードの出力 */
      printf("目的関数の最大化or最小化のデータが不正です!!\n");
      assert((input->string[1]=='a')&&(input->string[1]=='A')&&(input->string[1]=='i')&&(input->string[1]=='I'));
   }
}
Example #2
0
static int
read_token(gss_name_t service, const char *ccname, int negotiate, size_t count)
{
	size_t	i;
	int	ret;

	for (i=0; i < count; i++) {
		ret = read_one_token(service, ccname, negotiate);
	}

	return ret;
}
void read_constrain(input_file *input, FILE *fp){   //制約条件の読み込み
	int i;
	for(i=1; i<=m; i++){		        /* 制約条件式の数だけ繰り返す */
      printf("第%2d式  ",i);
      read_one_line(fp,input->line);    /* ファイルからデータを1行読み込む */
/*--------------------------------------
	制約条件式の解析
--------------------------------------*/
      /* 1:左辺値の読み込み */
      input->string=strtok(input->line," ");
      /* 最初は先頭からトークンを読み込む */
      while((input->string[0]!='<')&&(input->string[0]!='=')&&(input->string[0]!='>')&&(input->string[0]!='\n')){
			/* トークンが不等号か改行コードを含まない間繰り返す */
			input->x_sub = read_one_token(input->string, &input->coef);
			/* 読み込んだトークンを構文解析する */
			a[i][input->x_sub] = input->coef;
			/* 制約条件式の係数aに代入する */
			printf("%6.2fX%d ",input->coef,input->x_sub);
			input->string=strtok(NULL," ");	/* 新しいトークンを読み込む */
		}
      /* 2:不等号の読み込み */
      sign[i]=input->string[0];
      printf("%c= ",sign[i]);
      if(input->string[0]=='\n'){
			/* エラーチェック(不等号でなく改行コードだったとき) */
			printf("データに正しい不等号がありません\n");
			assert(input->string[0]!='\n');
		}
      /* 3:右辺の定数の読み込み */
      input->string=strtok(NULL," ");	        /* 定数のトークンを読み込む */
      b[i]=atof(input->string);	       	        /* 右辺の定数bに代入する */
      printf("%6.2f\n",b[i]);
   	/* if(b[i]==(0.0)){		   エラーチェック(0.0)=EROOR
			printf("EROOR!!定数データが不正です\n");
			assert(b[i]!=0.0);	   プログラムを終了する
      } */
   }
}
Example #4
0
/* Read and parse one input line from file */
bool read_line(FILE * f, const std::string filename, size_t i, uint & I, uint & J, float &val, std::vector<float>& valarray, int type, char * linebuf_debug){

  char * linebuf = NULL;
  size_t linesize = 0;

  I = J = 0;
  int token = 0;
  int index = 0;
  int rc = getline(&linebuf, &linesize, f);
  if (rc == -1){
    perror("getline");
    logstream(LOG_FATAL)<<"Failed to get line: " << i << " in file: " << filename << std::endl;
  }

  char * linebuf_to_free = linebuf;
  strncpy(linebuf_debug, linebuf, 1024);

  assert(file_columns >= 2);


  char * pch = NULL;
 
  while (token < file_columns){
    /* READ FROM */
    if (token == fc.from_pos){
      pch = read_one_token(linebuf, i, linebuf_debug, token);
      I = (uint)get_node_id(pch, 0, token, i, type != TRAINING);
      if (type == TRAINING){
        assert( I >= 0 && I < M);
      }
      token++;
    }
    else if (token == fc.to_pos){
      /* READ TO */
      pch = read_one_token(linebuf, i, linebuf_debug, token);
      J = (uint)get_node_id(pch, 1, token, i, type != TRAINING);
      if (type == TRAINING)
        assert(J >= 0 && J < N);
      token++;
    }
    else if (token == fc.val_pos){
      /* READ RATING */
      pch = read_one_token(linebuf, i, linebuf_debug, token, type);
      if (pch == NULL && type == TEST)
         return true;
      val = get_value(pch, type != TRAINING, linebuf_debug, i);
      token++;
    }
    else { 
      if (token >= file_columns)
        break;

      /* READ FEATURES */
      pch = read_one_token(linebuf, i, linebuf_debug, token, type);
      if (pch == NULL && type == TEST)
        return true;
      if (!fc.feature_selection[token]){
        token++;
        continue;
      }

      assert(index < (int)valarray.size());
      valarray[index] = get_node_id(pch, index+2, token, i, type != TRAINING); 
      if (type == TRAINING)

        if (std::isnan(valarray[index]))
          logstream(LOG_FATAL)<<"Error reading line " << i << " feature " << token << " [ " << linebuf_debug << " ] " << std::endl;

      index++;
      token++;
    }
  }//end while
  free(linebuf_to_free);
  return true;
}//end read_line