「拡張プログラム1ソース 飯尾」の編集履歴(バックアップ)一覧はこちら

拡張プログラム1ソース 飯尾」(2007/07/04 (水) 02:04:59) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

//c #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE_SIZE 256 #define CMD_SIZE 100 void temporary_save(FILE *txtfile , FILE *temp); void execmd(FILE *txt, FILE *temp, char *txtname, char *temp_cmd, int *p); void display_all(FILE *txt); void save_end(int *p); void not_save(FILE *txt, FILE *temp, char *txtname, int *p); int main(int argc, char *argv[]){ FILE *txtfile,*temp; int start = 0; int coe = 1;//終了条件(Condition Of End) int *p_coe = &coe; //coeへのポインタ char cmd[CMD_SIZE]; //コマンド char temp_text[L_tmpnam]; //一時的ファイルのファイル名 tmpnam(temp_text); //一時的ファイルのファイル名の決定 //ファイルの引数を調べる。 if(argc != 2){ printf("引数にはファイルのパスを指定してください\n"); exit(1); } //終了するまで無限ループ while(coe){ //ファイルが開けるかどうかを調べる。 if((txtfile = fopen(argv[1], "r")) == NULL){ printf("ファイルを開くことが出来ません"); exit(1); } //*を表示する if(start) printf("*"); else{ //変更せずに終了するときに使用する変更前のファイルの保存 temp = fopen(temp_text, "w"); temporary_save(txtfile,temp); temp = freopen(temp_text,"r",temp); txtfile = fopen(argv[1], "r"); printf("ファイルを終わりまで読み込みました\n*"); start++; } //コマンドを入力 fgets(cmd, CMD_SIZE, stdin); execmd(txtfile, temp, argv[1], cmd, p_coe); //ファイルを閉じる fclose(txtfile); } remove(temp_text); //一時的ファイルを削除する return 0; } //一時的ファイルの保存 void temporary_save(FILE *txtfile,FILE *temp){ int c; /* 文字を読み込む */ /* ファイルから EOFが現れるまで1字読み込む */ while ((c = getc(txtfile)) != EOF) { fputc(c,temp); } fclose(txtfile); } //機能はここに追加 void execmd(FILE *txt, FILE *temp, char *txtname, char *temp_cmd, int *p){ if(strcmp(temp_cmd, "l\n") == 0 || strcmp(temp_cmd, "L\n") == 0) display_all(txt); if(strcmp(temp_cmd, "e\n") == 0 || strcmp(temp_cmd, "E\n") == 0) save_end(p); if(strcmp(temp_cmd, "n\n") == 0 || strcmp(temp_cmd, "N\n") == 0) not_save(txt,temp,txtname,p); return; } //以下は拡張した関数群 //すべての行を表示 void display_all(FILE *txt){ char str[LINE_SIZE]; int i = 1; while(!feof(txt)){ if(fgets(str, LINE_SIZE - 1, txt) == NULL) strcpy(str, "\n"); if(ferror(txt)){ printf("ファイルエラー\n"); break; } if(!feof(txt)) printf("%8d: %s", i, str); else{ if(strcmp(str, "\n") != 0) printf("%8d: %s\n", i, str); } i++; } return; } //セーブして終了 void save_end(int *p){ *p = 0; return; } //セーブしないで終了 void not_save(FILE *txt, FILE *temp,char *txtname, int *p){ int c; /* 文字を読み込む */ txt = freopen(txtname,"w",txt); //読み込みから書き込みへ /* ファイルから EOFが現れるまで1字読み込む */ while ((c = getc(temp)) != EOF) { //最初に保存してた内容を読み込み fputc(c,txt); //元のファイルに戻す } fclose(temp); *p = 0; }
//c #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE_SIZE 256 #define CMD_SIZE 100 void temporary_save(FILE *txtfile , FILE *temp); void execmd(FILE *txt, FILE *temp, char *txtname, char *temp_cmd, int *p); void display_all(FILE *txt); void save_end(int *p); void not_save(FILE *txt, FILE *temp, char *txtname, int *p); int main(int argc, char *argv[]){ FILE *txtfile,*temp; int start = 0; int coe = 1;//終了条件(Condition Of End) int *p_coe = &coe; //coeへのポインタ char cmd[CMD_SIZE]; //コマンド char temp_text[L_tmpnam]; //一時的ファイルのファイル名 tmpnam(temp_text); //一時的ファイルのファイル名の決定 //ファイルの引数を調べる。 if(argc != 2){ printf("引数にはファイルのパスを指定してください\n"); exit(1); } //終了するまで無限ループ while(coe){ //ファイルが開けるかどうかを調べる。 if((txtfile = fopen(argv[1], "r")) == NULL){ printf("ファイルを開くことが出来ません"); exit(1); } //*を表示する if(start) printf("*"); else{ //変更せずに終了するときに使用する変更前のファイルの保存 temp = fopen(temp_text, "w"); temporary_save(txtfile,temp); temp = freopen(temp_text,"r",temp); txtfile = fopen(argv[1], "r"); printf("ファイルを終わりまで読み込みました\n*"); start++; } //コマンドを入力 fgets(cmd, CMD_SIZE, stdin); execmd(txtfile, temp, argv[1], cmd, p_coe); //ファイルを閉じる fclose(txtfile); } fclose(temp); remove(temp_text); //一時的ファイルを削除する return 0; } //一時的ファイルの保存 void temporary_save(FILE *txtfile,FILE *temp){ int c; /* 文字を読み込む */ /* ファイルから EOFが現れるまで1字読み込む */ while ((c = getc(txtfile)) != EOF) { fputc(c,temp); } fclose(txtfile); } //機能はここに追加 void execmd(FILE *txt, FILE *temp, char *txtname, char *temp_cmd, int *p){ if(strcmp(temp_cmd, "l\n") == 0 || strcmp(temp_cmd, "L\n") == 0) display_all(txt); if(strcmp(temp_cmd, "e\n") == 0 || strcmp(temp_cmd, "E\n") == 0) save_end(p); if(strcmp(temp_cmd, "n\n") == 0 || strcmp(temp_cmd, "N\n") == 0) not_save(txt,temp,txtname,p); return; } //以下は拡張した関数群 //すべての行を表示 void display_all(FILE *txt){ char str[LINE_SIZE]; int i = 1; while(!feof(txt)){ if(fgets(str, LINE_SIZE - 1, txt) == NULL) strcpy(str, "\n"); if(ferror(txt)){ printf("ファイルエラー\n"); break; } if(!feof(txt)) printf("%8d: %s", i, str); else{ if(strcmp(str, "\n") != 0) printf("%8d: %s\n", i, str); } i++; } return; } //セーブして終了 void save_end(int *p){ *p = 0; return; } //セーブしないで終了 void not_save(FILE *txt, FILE *temp,char *txtname, int *p){ int c; /* 文字を読み込む */ txt = freopen(txtname,"w",txt); //読み込みから書き込みへ /* ファイルから EOFが現れるまで1字読み込む */ while ((c = getc(temp)) != EOF) { //最初に保存してた内容を読み込み fputc(c,txt); //元のファイルに戻す } *p = 0; }

表示オプション

横に並べて表示:
変化行の前後のみ表示: