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')); } }
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); プログラムを終了する } */ } }
/* 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