// ネットビークルメーリングリスト対応 #include #include #include void main() { FILE *fp_r,*fp_w,*cut,*fp_teigi; unsigned char buffer[1024],hikaku[256],hikaku_end[256],source[256]; unsigned char new_mbx[256],tuika_new[]="_new",cut_mbx[256],tuika_cut[]="_cut",kaigyou[]="\n"; int n; printf("処理を開始しました。\n"); printf("k-square.iniに問題があると正常に動作しません。\n"); printf("処理がうまくいかない場合は書式などを確認して下さい。\n\n\n"); printf("処理中です\n+\n+\n"); //k-square.iniから、切り取り文字列のスタート地点と終了地点を読み込む //そのための定義ファイルをオープン。失敗でエラーを返す。 fp_teigi=fopen("k-square.ini","r"); if(fp_teigi==NULL){ printf("k-square.ini Open ERROR!!\n"); getchar(); exit(-1); } //続いて、比較文字列をhikakuとhikaku_endに取り込む。 //失敗でそれぞれエラーを返す。 if((fgets(hikaku,256,fp_teigi))==NULL){ if(ferror(fp_teigi)!=0){ printf("k-square.ini First Line ERROR!!\n"); getchar(); exit(-1); } } if((fgets(hikaku_end,256,fp_teigi))==NULL){ if(ferror(fp_r)!=0){ printf("k-square.ini Second Line ERROR!!\n"); getchar(); exit(-1); } } //最後にソースファイルの名前を読み込む。 //これを行うことで連続処理を行えるようにする。 renzoku_shori: //EOFがあらわれるまで連続してソースファイルを読み込み、実行する。 if((fgets(source,256,fp_teigi))==NULL){ if(ferror(fp_teigi)!=0){ printf("k-square.ini Line ERROR!!\n"); getchar(); exit(-1); } } if(feof(fp_teigi)!=0) goto shuryo; //改行コードをNULLに書き換える。 n=strlen(source); source[n-1]=0x00; //読み込むファイルsourceをテキストで開く。失敗でエラーを返す。 fp_r=fopen(source,"r"); if(fp_r==NULL){ printf("Source Files Read Open ERROR!!\n"); getchar(); exit(-1); } //読み込むファイル名から、書き込むファイル名を作る。 //ルールはソースファイル名の最後に"_new"をつける。 strcpy(new_mbx,source); strcat(new_mbx,tuika_new); //読み込むファイル名から、切り取ったファイル名を作る。 //ルールはソースファイル名に最後に"_cut"をつける。 strcpy(cut_mbx,source); strcat(cut_mbx,tuika_cut); //書き込むファイルをテキストで開く。失敗でエラーを返す。 //ヘッダーを切ったコピーを書き込むファイル fp_w=fopen(new_mbx,"w"); if(fp_w==NULL){ printf("New Mbx Files Write Open ERROR!!\n"); getchar(); exit(-1); } //書き込むファイルをテキストで開く。失敗でエラーを返す。 //切り取った文字列を書き込むファイル cut=fopen(cut_mbx,"w"); if(cut==NULL){ printf("Header Files Write Open ERROR!!\n"); getchar(); exit(-1); } //ループ開始 //EOFが現れたループがでたときにブレイク。 for(;;){ //開いたファイルsourceからbufferに1行分読み込む。 //その際最大文字数は1023文字。 //失敗でエラーを返す。 if((fgets(buffer,1024,fp_r))==NULL){ if(ferror(fp_r)!=0){ printf("Text of Source Read ERROR!!\n"); getchar(); exit(-1); } } //開いたファイルにある文字列に //「hikaku」に当たる文字列 //があった場合にコピーしないようにして、 //「hikaku_end」だけの行を探して、そこまで //進ませる if((strncmp(hikaku,buffer,strlen(hikaku)))==0){ while(1){ //切り取る部分をcut_mbxに書き込む fputs(buffer,cut); //開いたファイルsourceからbufferに1行分読み込む。 //その際最大文字数は1023文字。 //失敗でエラーを返す。 if((fgets(buffer,1024,fp_r))==NULL){ if(ferror(fp_r)!=0){ printf("Text of Source [head] Read ERROR!!\n"); getchar(); exit(-1); } } if((strncmp(hikaku_end,buffer,strlen(hikaku_end)))==0) break; } //回数調整にさらにもう一度 //切り取る部分をcut_mbxに書き込む fputs(buffer,cut); //回数調整にさらにもう一度 //開いたファイルsourceからbufferに1行分読み込む。 //その際最大文字数は1023文字。 //失敗でエラーを返す。 if((fgets(buffer,1024,fp_r))==NULL){ if(ferror(fp_r)!=0){ printf("Text of Source [head] Read ERROR!!\n"); getchar(); exit(-1); } } //もしこのとき改行のみの行であった場合は何度でも繰り返す。 if((strncmp(kaigyou,buffer,strlen(kaigyou)))==0){ for(;(strncmp(kaigyou,buffer,strlen(kaigyou)))==0;){ if((fgets(buffer,1000,fp_r))==NULL){ if(ferror(fp_r)!=0){ printf("Text of Source [CR] Read ERROR!!\n"); getchar(); exit(-1); } } } } } //既に開いているファイルnew_mbxに1行分書き込む。 fputs(buffer,fp_w); //EOFが在ったときはここでループを終了する if(feof(fp_r)!=0) break; } //ファイルをクローズするx3 fclose(fp_r); fclose(fp_w); fclose(cut); printf("+\n"); goto renzoku_shori; shuryo: //定義ファイルk-square.iniのクローズ fclose(fp_teigi); printf("終了しました\n\n\n"); printf("-------------------------------------------------------\n"); printf("「元ファイル名_cut」のファイルが、切り取られたヘッダーで\n"); printf("「元ファイル名_new」のファイルが、新たに出来たmbxファイルです。\n"); printf("中身の確認、及び、ファイル名の変更などは各自行って下さい。\n\n\n"); printf("Press Any Key to Exit.\n"); getchar(); }