• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【C言語】テキストファイル内のデータを一行削除)

【C言語】テキストファイル内のデータを一行削除

このQ&Aのポイント
  • C言語でテキストファイル内の特定の行を削除する方法について教えてください。
  • 例えば、scanfで入力した文字列と一致する行をテキストファイルから削除する方法を教えてください。
  • バナナと入力された行をテキストファイルから削除し、行を詰める方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#208507
noname#208507
回答No.2

下のソースコードをコンパイルして実行すると、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; } ------------ ここまで ------------

kotetsu610905
質問者

お礼

ulisrtさん、 ご回答ありがとうございます。 ソースコードも記載していただき、 本当に助かります。 さっそく試させていただきます。 ありがとうございました。

その他の回答 (3)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>ulisrtさんの教えていただいたコードに、 >ファイルを削除する内容のコード付け加えようとしているのですが、 >なかなか上手くいきません。 元のプログラムがどういう流れになってるのか理解できてます? まずはそこから始めた方がいいと思いますよ。

kotetsu610905
質問者

お礼

wormholeさん、 ご回答ありがとうございます。 スマートなコードではないですけど、 なんとか解決できました。

noname#208507
noname#208507
回答No.3

申し訳ありません。 こちらは実行したパスにスペースを含んでいなかったので、手間を取らせてしまったようですね。 ついでなので訂正します。 ソースコードの最後の return 1; も return 0; の間違いです。 1ではエラー終了扱いになるので。

kotetsu610905
質問者

お礼

ulisrtさん、 わざわざありがとうございます。 本当に助かりました。 ulisrtさんの教えていただいたコードに、 ファイルを削除する内容のコード付け加えようとしているのですが、 なかなか上手くいきません。 厚かましいお願いなのですが、 どうかご指南いただけないでしょうか。 【追加しようとしているコード】 #include <stdio.h> int main(void) { char *filename = "sample.txt"; if( remove( filename ) == 0 ){ printf( "%sファイルを削除しました", filename ); } else{ printf( "ファイル削除に失敗しました" ); } return 0; } どうぞ、宜しくお願い致します。

kotetsu610905
質問者

補足

説明に漏れがありましたので、 補足させていただきます。 【流れ】 sample.txt読み込み   ↓ output.txt書き出し ------------------(ここまではulisrtさんにご協力いただきました。)   ↓ sample.txtを削除 どうぞ宜しくお願い致します。

  • ysawave
  • ベストアンサー率50% (2/4)
回答No.1

まず、ファイルの内容を直接更新するのはハードルが高いと思います。 (初心者であれば、なおさら) なので、考え方だけ書きますと 「元のファイル<1>を1行ずつ読み込み、必要な行ならば別のファイル<2>に書き出す」 方針が良いのでは? さらに"元のファイル名"のものだけ残したいとするのであれば、 [a] <2>を"元のファイル名"と違う名前で新しく作成する  → 終了したら、<1>を削除して、<2>を"元のファイル名"にリネーム または [b] "元のファイル名"を別名にリネームしたものを<1>とする  <2>を"元のファイル名"で新しく作成する  → 終了したら、不要となった<1>を削除する といった段取りで。

kotetsu610905
質問者

お礼

ysawaveさん、 ご回答ありがとうございます。 参考になりました。 挑戦してみます。

関連するQ&A