スマートな読み込みプログラムの書き方
Posted: 2013年11月15日(金) 23:10
こんばんわ。3Dです。今回はファイルの読み込みについて質問があります。
以前たてたトピックで
のようなコードを書いておりました。しかし、これだとコードがごちゃごちゃして見づらいので新たにファイル読み込みプログラムを書きたいと思いました。
自分は上のようなコードしかかけないので、スマートな書き方を教えて下さい。お願いします。
[開発環境]
C言語
Windows7
VC2010
と
WindowsXP
VC2008
以前たてたトピックで
void Music_Draw::Load_Script()
{
char FileName[] = "dat/bgm/musiccmt.txt"; // ファイルの名前
int i,num=0,n=0,line=0; // n曲目の判断やfor文関係
int input[128]; // 一文字読み込むのに必要
char inputc[128]; // 上に同じ
FILE* fp = fopen( FileName , "r" ); // ファイルを開く
if( fp == NULL ){ // ファイルが無い時の処理
MSG( "No Script File !" );
exit(1);
}
for(i=0 ; i<4 ; i++ ) // 最初の4行はコメントなので読み飛ばす
while( fgetc( fp ) != '\n' );
while( 1 ){
for(i=0 ; i<128 ; i++ ){ // 横64文字まで読み込んで
input[i] = inputc[i] = fgetc( fp );
if( input[i] == '#' ){ // コメント記号ならば
while( fgetc( fp ) != '\n' ); // その行の終わりまでループして
i = -1; // カウンタを戻して
continue;
}
if( input[i] == '\n' ){ // 改行記号なら(独自フォーマットのファイルだから改行で区切る)
inputc[i] = '\0'; // そこまでを文字列にして
break;
}
if( input[i] == EOF ){ // EOFなら(ここは、charで判断はしないほうが良い)
goto EXFILE; // ファイルクローズタグにジャンプ( でいいのかな? )
}
}
switch( num ){ // 読み込んだファイルから構造体にコピーする
case 0: strcpy( music[n].path , inputc ); break; // 音楽再生の為のパス
case 1: strcpy( music[n].name[0], inputc ); break; // 名前1 : No.~
case 2: strcpy( music[n].name[1], inputc ); break; // 名前2 : ♪~
// -----------------以下、コメント読み込み----------------- //
case 3: strcpy( music[n].comme[ line ] , inputc );break;
case 4: strcpy( music[n].comme[ line + 1 ], inputc );break;
case 5: strcpy( music[n].comme[ line + 2 ], inputc );break;
case 6: strcpy( music[n].comme[ line + 3 ], inputc );break;
case 7: strcpy( music[n].comme[ line + 4 ], inputc );break;
case 8: strcpy( music[n].comme[ line + 5 ], inputc );break;
case 9: strcpy( music[n].comme[ line + 6 ], inputc );break;
// -------------------------------------------------------- //
}
num++; // num加算
if( num == 10 ){ // numの値が9(1曲分のファイル読み込みが終わったら)なら
num = 0; // numを加算
n++; // nも加算
}
}
EXFILE: // ファイルクローズ
fclose( fp );
}
自分は上のようなコードしかかけないので、スマートな書き方を教えて下さい。お願いします。
[開発環境]
C言語
Windows7
VC2010
と
WindowsXP
VC2008