- ベストアンサー
【C言語】テキストファイル内のデータを一行削除
- C言語でテキストファイル内の特定の行を削除する方法について教えてください。
- 例えば、scanfで入力した文字列と一致する行をテキストファイルから削除する方法を教えてください。
- バナナと入力された行をテキストファイルから削除し、行を詰める方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
下のソースコードをコンパイルして実行すると、sample.txt を読み込んで、output.txt に結果を書き出します。いかに短いコードで作るか試してみました。 ------------ ここから ------------ #include <stdlib.h> #include <stdio.h> #include <string.h> static char buf[BUFSIZ], str[BUFSIZ]; static void input(char *c) { printf("文字を入力してください\n"); scanf("%s", buf); sprintf(str, "%s %s < sample.txt > output.txt", c, buf); system(str); } static void output(char *s, int l) { while (gets(buf)) if (strncmp(buf, s, l)) puts(buf); } int main(int ac, char *av[]) { if (ac == 1) input(av[0]); else output(av[1], strlen(av[1])); return 1; } ------------ ここまで ------------
その他の回答 (3)
- wormhole
- ベストアンサー率28% (1626/5665)
>ulisrtさんの教えていただいたコードに、 >ファイルを削除する内容のコード付け加えようとしているのですが、 >なかなか上手くいきません。 元のプログラムがどういう流れになってるのか理解できてます? まずはそこから始めた方がいいと思いますよ。
お礼
wormholeさん、 ご回答ありがとうございます。 スマートなコードではないですけど、 なんとか解決できました。
申し訳ありません。 こちらは実行したパスにスペースを含んでいなかったので、手間を取らせてしまったようですね。 ついでなので訂正します。 ソースコードの最後の return 1; も return 0; の間違いです。 1ではエラー終了扱いになるので。
お礼
ulisrtさん、 わざわざありがとうございます。 本当に助かりました。 ulisrtさんの教えていただいたコードに、 ファイルを削除する内容のコード付け加えようとしているのですが、 なかなか上手くいきません。 厚かましいお願いなのですが、 どうかご指南いただけないでしょうか。 【追加しようとしているコード】 #include <stdio.h> int main(void) { char *filename = "sample.txt"; if( remove( filename ) == 0 ){ printf( "%sファイルを削除しました", filename ); } else{ printf( "ファイル削除に失敗しました" ); } return 0; } どうぞ、宜しくお願い致します。
補足
説明に漏れがありましたので、 補足させていただきます。 【流れ】 sample.txt読み込み ↓ output.txt書き出し ------------------(ここまではulisrtさんにご協力いただきました。) ↓ sample.txtを削除 どうぞ宜しくお願い致します。
- ysawave
- ベストアンサー率50% (2/4)
まず、ファイルの内容を直接更新するのはハードルが高いと思います。 (初心者であれば、なおさら) なので、考え方だけ書きますと 「元のファイル<1>を1行ずつ読み込み、必要な行ならば別のファイル<2>に書き出す」 方針が良いのでは? さらに"元のファイル名"のものだけ残したいとするのであれば、 [a] <2>を"元のファイル名"と違う名前で新しく作成する → 終了したら、<1>を削除して、<2>を"元のファイル名"にリネーム または [b] "元のファイル名"を別名にリネームしたものを<1>とする <2>を"元のファイル名"で新しく作成する → 終了したら、不要となった<1>を削除する といった段取りで。
お礼
ysawaveさん、 ご回答ありがとうございます。 参考になりました。 挑戦してみます。
お礼
ulisrtさん、 ご回答ありがとうございます。 ソースコードも記載していただき、 本当に助かります。 さっそく試させていただきます。 ありがとうございました。