「今更挿入修正 飯尾」の編集履歴(バックアップ)一覧はこちら

今更挿入修正 飯尾」(2007/08/03 (金) 00:24:53) の最新版変更点

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

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

//c //行挿入 void line_insert(char *txtname) { //ほぼ行削除と同じ構造 int i , j ; FILE *shadow; char c = 1, line[10], str[LINE_SIZE], shadow_name[L_tmpnam] ; tmpnam(shadow_name); printf("挿入したい行番号を入力して下さい\n"); fgets(line,9,stdin); //挿入したい行を入力してもらう。 if( atoi(line) <= 0 ) { printf("行番号が不正です。\n"); return; } shadow = fopen(shadow_name,"w"); if( atoi(line) == 1 ) //もし1行目に挿入したい場合は先に入力をする { printf("挿入したい文章を入力して下さい\n"); printf("%8d: ", 1); fgets(str,LINE_SIZE,stdin); //挿入する内容を入力 fputs(str,shadow); //それをコピー } //あとは2行目以降に挿入したい場合と同じ動きをする for(i=1;c != EOF;i++) { if((c = fgetc(txtfile)) == EOF ) //その行の一文字目がEOFなら { break ; //終了 } else if( c == '\n' ) //その行が単なる改行なら { j = 0 ; str[j] = '\n' ; //改行をstrにおさめて goto input ; //読み込み作業は飛ばす } str[0] = c ; //一文字目がEOFでも改行でもなかったら for(j=1;(c = fgetc(txtfile)) != '\n';j++) //改行するまでその行を読み込む { str[j] = c ; if( c == EOF ) //ファイルの最後が改行せずに終わっていたら { goto input; //改行を入れることなく飛ばす } } str[j] = '\n' ; //改行をstrに入れる input : ; str[++j] = '\0' ; //最後にNULL文字を入れる if( i != atoi(line) -1 ) //挿入する手前以外の行は普通にshadowにコピー { fputs(str,shadow); } else //挿入する手前の行は { fputs(str,shadow); //まず手前の行の内容をコピー printf("挿入したい文章を入力して下さい\n"); printf("%8d: ", atoi(line)); fgets(str,LINE_SIZE,stdin); //挿入する内容を入力 fputs(str,shadow); //それをコピー //通常の動きに戻る } } if( atoi(line) > i ) { printf("このコマンドは無効です。\n"); } txtfile = freopen(txtname,"w",txtfile); //両方のファイルをオープンし直して shadow = freopen(shadow_name,"r",shadow); for(;(c = fgetc(shadow)) != EOF;) //shadowの中身をtxtfileにコピー { for(;c != '\n' && c != EOF;c = fgetc(shadow)) { fputc(c,txtfile); } fputc('\n',txtfile); } fclose(shadow); remove(shadow_name); return; }

表示オプション

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