• 締切済み

テキストファイル内の任意の単語を含む一行を削除させたい

メインのテキストファイルを別のテキストファイルに記述されたキーワードに合致する行を削除したいのです。 例:honbun.txtの内容が むかしむかし、あるところに お爺さんと お婆さんが 住んでいました。 ある日、お爺さんは 山へ芝刈りに キーワードリスト:key.txt が むかし お爺さん 芝刈り である時、結果を result.txt に書き出すとして お婆さんが 住んでいました。 という結果を導きたいのです。 コマンド処理をしたいので、プログラム名を ABC.exeと仮定して >abc.exe honbun.txt key.txt result.txt のようなコマンドラインで処理できるようなプログラムを考えています。 オーサリングツールとしてVC++.net があるのですが、あいにくプログラミングの知識が乏しいため、こんな簡単なプログラムも出来ません。 どなたかお力添えいただければ幸いです。

みんなの回答

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

簡単なプログラムと書かれていますが、日本語処理を実現するのは簡単ではありません。 このプログラムのポイントをまとめてみます。 1.コマンド処理  コマンドライン引数のとり方は分かりますか?  パラメータの数をチェックし、必要な数がそろっていることを確認した後で、文字列を取得します。  具体的に言うとargcが4である場合に、argv[1]を本文ファイル名、argv[2]をキーワードファイル名、argv[3]を結果ファイル名とします。 2.ファイル処理  ファイルをどのように読み込んで処理を行い、書き込むのかは分かりますか?  扱うファイルの中で本文ファイルがおそらく一番大きいと思うので、読み込みを1回だけとするのが良いでしょう。  キーワードファイルのサイズが小さい場合、全部をメモリに読み込んでおいて比較に用いるのが良いと思います。  結果ファイルは、順次書き込んで行くだけなので特に問題はありませんね。  ファイルの読み込み方と書き込み方は、どの関数を用いるかで処理方法も変わるので、具体的な記述は避けます。 3.文字列の比較  文字列中の文字列を検出するにはstrstr関数を使用すればよいので問題ないのですが、ここで日本語が引っかかります。  まず、日本語処理は必須でしょうか?その際、使用する文字コードは規定されているのでしょうか?それとも汎用なのでしょうか?  文字コードが規定されている場合、そこからUNICODEに変換し、対応関数を用いるのが簡単です。もとからUNICODEであれば変換の必要すらありません。  文字コードが規定されていない場合は文字コードの判別から必要になるので、文字コードの種類を調べるところからはじめなければなりません。  こんなところでしょうか。VC++.netというところでWindowsだろうという想像はできますが、開発環境と動作環境はなるべく詳しく書いて頂けると回答も的確になると思います。

  • rub_oil
  • ベストアンサー率14% (3/21)
回答No.2

ぼへーっと考えたのですが 1.入力ファイルを開き、ファイルのサイズを取得する。 2.NGワードファイルを読み、NGワードを取得して、閉じる。 3.出力ファイルを開く。 3.以下、読み込み量=ファイルサイズになるまで繰り返し 3.11文字づつ読み込み、\nかどうかをチェック 3.2\nまで読み込んだら、それまで読み込んだモノを1行として    ソコにNGワードが含まれてるかチェックする。 3.3含まれてなかったら出力ファイルに書き出す 3.4読み込み領域のクリア 4.読み込み量=ファイルサイズになったはずなので、開いたファイルを閉じる。 5.終了 こんな感じでしょうか。 まさか、全部ソースを書けって話でしたか?

gldneg
質問者

お礼

フローのイメージが取れました。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「プログラムを作りたい」のか「処理をしたいだけ」なのかわかりませんが, 後者なら grep か fgrep で検索すると幸せになれるような気がする.

gldneg
質問者

お礼

基本的にはプログラムを作る予定です。 マクロだとサーバ処理に難があるので、、。 アドバイスありがとうございました。

関連するQ&A