データの読み込みがうまくいかなくて、困っています
プログラミング初心者です。
誤差逆伝播学習のプログラムを行っています。
C言語で、データの読み込み部分がうまくいかなくて、困っています。
borland , BCC Developerなどを用いてやっております。
やりたいことは、テキストファイルから数字を読み込み、それを行列に格納してデータとして送るということです。
その際に、テキストファイルで行と列で表示されたものを送ろうと考えています。30×30の、1と0で表示された絵と教師信号を読み取っています。
列だけの読み込みは正常に動いたのですが、行と列で表示されたものの読み込みができません。char型で変数を宣言しているので、数字として読み込めていないとか、そういったことがあるのでしょうか。o1[][],t[][]の部分に正しく値が送れるようにしたいです。
非常にわかりにくくて申し訳ないのですが、お分かりになる方がいたら、どこをどう変えれば良いか、教えて頂きたいです。
「間違っている列と行の読み込み」
//データをファイルから読み込む//
void read_file(name)
char *name;
{
int i,j,k; //ループカウンター//
FILE *fp; //ファイルポインタ//
char buff[MCHS]; //buffの最大文字数1024
//ファイルオープン//
if((fp=fopen(name,"r"))==NULL){
fprintf(stderr,"%s:File open error !!\n",name);
exit(-1);
}
//学習データを読み込む//
fscanf(fp, "%d",&learning_pattern_no); //学習パターンの数読み込み
fscanf(fp,"%d",&test_pattern_no); //テストパターンの数読み込み
printf("学習パターンの数:%d\n",learning_pattern_no); //学習パターンの数表示
printf("テストパターンの数:%d\n",test_pattern_no); //テストパターンの数表示
i=0;j=0;
while( fgets( buff, MCHS, fp ) != NULL ){
if(j<=learning_pattern_no+test_pattern_no-1){
for( k=0; k<MCHS; k++ ){
o1[j][i+k]=buff[k]; //o1[j][i+k]にbuff[k]を入れる
printf("%c",buff[k]); //printfで確認
if( buff[k] =='\n'){
i=i+k;
if (i==InputUnitNo){
i=0;
j++;
printf("%d",j);
}//if(i==InputUnitNo)終了
break;
}//if(buff[k])終了
}//for終了
}//if(j<=learn+test)終了
else{ //ここから教師信号の読み取り
for( k=0; k<MCHS; k++ ){
t[i][k]=buff[k];
printf("%c",buff[k]); //教師信号の確認
if( buff[k] == '\n' ){
i++;
break;
}//if(buff[k])終了
}//for終了
}//else終了
}//while終了
}
「正常に動いた列だけの読み込み」
//データをファイルから読み込む//
void read_file(name)
char *name;
{
int i,j; //ループカウンター//
FILE *fp; //ファイルポインタ//
//ファイルオープン//
if((fp=fopen(name,"r"))==NULL){
fprintf(stderr,"%s:File open error !!\n",name);
exit(-1);
}
//学習データを読み込む//
fscanf(fp, "%d",&learning_pattern_no);
printf("学習データの数:%d\n",learning_pattern_no);
for(i=0;i<learning_pattern_no; i++){
for(j=0;j<InputUnitNo; j++)
fscanf(fp,"%lf",&o1[i][j]);
for(j=0;j<OutputUnitNo; j++)
fscanf(fp,"%lf",&t[i][j]); //教師信号
}
//テストデータを読み込む//
fscanf(fp,"%d",&test_pattern_no);
printf("テストデータの数:%d\n",test_pattern_no);
for(i=learning_pattern_no;i<learning_pattern_no+test_pattern_no;i++)
for(j=0;j<InputUnitNo;j++)
fscanf(fp,"%lf",&o1[i][j]);
fclose(fp);
}
お礼
返信ありがとうございます。 もう一度、あらいざらい、見直しましたら、うまく表示できました。 csv.txtを保存する際、UTF-8ではなく、unicodeで保存したのが原因だと思います。 csv.txtをUTF-8で、BOMチェック無しで保存し、再度アップロードしたら、正常に表示できました。