C言語関係掲示板

過去ログ

No.1150 文書の検索プログラムについて

[戻る] [ホームページ]
No.14634

文書の検索プログラムについて
投稿者---八(2004/06/15 17:32:40)


テキストファイルを入力し、検索(探してる文字列を含む行を表示、など)処理を行うプログラムを作成せよ。という課題が出たんですが全くわかりません。
誰かヒントだけでも教えて下さい。


No.14637

Re:文書の検索プログラムについて
投稿者---ニタチ(2004/06/15 18:23:23)


>テキストファイルを入力し、検索(探してる文字列を含む行を表示、など)処理を行うプログラムを作成せよ。という課題が出たんですが全くわかりません。
>誰かヒントだけでも教えて下さい。

 fopen()、fgets()、strstr()などを調べてみるといいと思います。


No.14683

Re:文書の検索プログラムについて
投稿者---八(2004/06/17 11:57:44)


fopen()などを使うのはわかるのですが、アルゴリズムがわからないんでどうしようもないんです。できればもう少し教えていただけないでしょうか?


No.14685

Re:文書の検索プログラムについて
投稿者---ニタチ(2004/06/17 12:34:27)


>fopen()などを使うのはわかるのですが、アルゴリズムがわからないんでどうしようもないんです。できればもう少し教えていただけないでしょうか?

 fgets()、strstr()はわかりますか???
 簡単に言いますと、ファイルをオープンした後、
 ループ+fgets()で1行ずつ読み込んでいきます。
 そしてstrstr()を使って検索していけばいいと思います。


No.14686

Re:文書の検索プログラムについて
投稿者---八(2004/06/17 12:46:39)


>>fopen()などを使うのはわかるのですが、アルゴリズムがわからないんでどうしようもないんです。できればもう少し教えていただけないでしょうか?
>
> fgets()、strstr()はわかりますか???
> 簡単に言いますと、ファイルをオープンした後、
> ループ+fgets()で1行ずつ読み込んでいきます。
> そしてstrstr()を使って検索していけばいいと思います。
正直言うとプログラム全然素人なんです。自力で勉強してもわからない所は混乱状態です。先生に聞いてもヒントすら教えてくれません。最後の手段でここに来ました。よろしかったら詳しく教えてくれませんか?


No.14688

Re:文書の検索プログラムについて
投稿者---nop(2004/06/17 13:09:01)


まずは、【掲示板ご利用上の注意】を良く読みましょう。

>正直言うとプログラム全然素人なんです。
>自力で勉強してもわからない所は混乱状態です。

そんな事は言い訳になりません。
プログラムに関する知識がないなら、
 「まずはプログラムに関する知識を身にて付けて下さい」
としか言いようがありません。

プログラムの知識のない人に、
いくら説明しても理解できるわけはないのですから。


>先生に聞いてもヒントすら教えてくれません。
>最後の手段でここに来ました。
>よろしかったら詳しく教えてくれませんか?

ここのHPはC言語に関する説明が書いているはずです。
まずは、ここサイトをじっくり読んでみてはいかがでしょうか?



No.14690

Re:文書の検索プログラムについて
投稿者---shu(2004/06/17 13:29:51)


全くわからない素人さんに、文書の検索プログラムがつくれるわけはありません。
全くわからない素人さんに、サンプルプログラムをみせたところで理解できるはずありません。
全くわからない素人さんに、ヒントは理解できません。
課題で出ているくらいですから、ふだん使っている教材(教科書、参考書、テキスト)などにヒントは載っていませんか?
数限りなくあるヒントを見落としてませんか?


No.14724

Re:文書の検索プログラムについて
投稿者---八(2004/06/18 10:55:14)


>全くわからない素人さんに、文書の検索プログラムがつくれるわけはありません。
>全くわからない素人さんに、サンプルプログラムをみせたところで理解できるはずありません。
>全くわからない素人さんに、ヒントは理解できません。
>課題で出ているくらいですから、ふだん使っている教材(教科書、参考書、テキスト)などにヒントは載っていませんか?
>数限りなくあるヒントを見落としてませんか?
プログラムを見れば、そこから教科書などで調べて理解することはできます。でも、1からプログラムを作ることができないんです。教科書読んでも実際使うことがなかなかできません。もしサンプルプログラムを載せていただければそこからいろいろ疑問も出てくると思うのですが今の状態では何もできないんです。本当によろしくお願いします。


No.14727

Re:文書の検索プログラムについて
投稿者---REE(2004/06/18 11:23:38)


サンプルプログラム命ですか?

今までの返信にサンプルプログラムに代わるものがあったと思いますが・・
挑戦しなければ、いつまでもプログラムは作れません。

それとも、サンプルプログラムをそのまま提出するのですか?


No.14728

Re:文書の検索プログラムについて
投稿者---八(2004/06/18 12:17:01)


>サンプルプログラム命ですか?
>
>今までの返信にサンプルプログラムに代わるものがあったと思いますが・・
>挑戦しなければ、いつまでもプログラムは作れません。
>
>それとも、サンプルプログラムをそのまま提出するのですか?
全くわからない人の気持ち考えてください。先生は教えてくれないし、教科書だけじゃわからない。このままじゃやる気が失われてくと思って、ここきたんです。サンプルプログラムをそのまま提出することは絶対しません。載せていただけたらそれについてまたいろいろ聞きたいと思ってます。誰か本当に...


No.14729

Re:文書の検索プログラムについて
投稿者---ニタチ(2004/06/18 12:41:06)


>全くわからない人の気持ち考えてください。先生は教えてくれないし、教科書だけじゃわからない。このままじゃやる気が失われてくと思って、ここきたんです。サンプルプログラムをそのまま提出することは絶対しません。載せていただけたらそれについてまたいろいろ聞きたいと思ってます。誰か本当に...

 ではあなたがどの程度できているのかソースを見せてください。
 ファイル名を入力、検索する文字列を入力くらいはできますよね?
 サンプルは載せてもいいんですが、あなたが、
 「全然わからない」「サンプルを載せてください」
 だけでは、やる気がないようにしか見られませんよ?
 


No.14743

Re:文書の検索プログラムについて
投稿者---なかはら(2004/06/18 17:13:22)


こんにちわ。
なかはらです。

> テキストファイルを入力し、検索(探してる文字列を含む行を表示、など)処理を行うプログラムを作成せよ。という課題が出たんですが全くわかりません。
> 誰かヒントだけでも教えて下さい。

では、まず何をしたいのかを整理しましょう。
プログラムではコーディング(実際のCの記述)も大切ですが、そのための設計(何をしたいのか)を行うことが大切です。

> テキストファイルを入力し、検索(探してる文字列を含む行を表示、など)処理を行うプログラムを作成せよ。

ということですが、この手の問題の場合、「入力」と「出力」を明確にすると良いでしょう。

例)
入力1:(プログラム実行後)キーボードから(コンソールにおいて)"c" と入力
入力2:以下のような "temp.txt" というファイルを読み込む
-----
012345
abcdef
ghijkl
-----

出力:"c" を含む行番号をコンソールに表示する(この場合"c"は2行目にあるので以下のように表示)
-----
2行目
-----

これらはいわゆる「仕様」というやつです。
・検索したい文字列はどこから得るのか?(キーボードから入力?ファイルから読み込み?)
・読み込むテキストファイルの中身はどのようなものか?(日本語?英語?数字?記号?それとも混在するのか?)
・どこに出力したいのか?(コンソール画面?ファイル?Windowsアプリ上?ネットワークでつながれたほかのPC上?)
・どのように出力したいのか?(検索した文字だけ?行番号だけ?行番号と行を表示して、検索文字列だけ色を変える?)
など、これはあなた(もしくは出題者)にしか分かりません。
まずはこれを明確にしてみると良いでしょう。


さて、次に考えなければならないのは、どのようにして機能を実現するか(どのように検索するか)です。
これはたくさん方法があります。ネット上にもアルゴリズムが転がっているはずです。
「C 文字列検索 アルゴリズム」
でググれば出てくるでしょう。(ためしてないけど)

このくらいの設計ができれば、コーディングに入れるでしょう。
で、肝心のコーディングはどのように行うのかというと、こればかりは「勉強してください」と言うしかないです。

> プログラムを見れば、そこから教科書などで調べて理解することはできます。

そういう勉強方法もありでしょうね。
「じゃあ、私がサンプルソースでも・・・」といいたいのですが、時間がなくなってきました(マジで)

さしあたって、過去ログ検索するか、
「C 文字列検索 サンプルソース」
でググればたくさんヒットするのではないでしょうか。(ためしてないけど)

では、がんばってください。




No.14747

Re:文書の検索プログラムについて
投稿者---ZAQ(2004/06/18 18:21:29)


#include<stdio.h>

int main(void)
{
    FILE *fp;//ポインタ宣言
    char moji[256];
    int x=0;

    fp=fopen("temp.txt","w");//ファイルを開く。無ければ作る。
    do{
        scanf("%s",moji);//文字列を入力。
        fprintf(fp,"%s\n",moji);//ファイルに文字列を書き込む。
    }while(x++<10);//11回繰り返す。

    fclose(fp);//ファイルを閉じる。

    return 0;
}

入力した文字列をファイルに書き込むのはこんな感じと思う。


No.14816

Re:文書の検索プログラムについて
投稿者---ニタチ(2004/06/21 17:24:22)


>「じゃあ、私がサンプルソースでも・・・」といいたいのですが、時間がなくなってきました(マジで)

 では私がサンプルソースを。遅かったかな・・・。
#include <stdio.h>
#include <string.h>

#define SIZE 256

int main(void)
{
    FILE *fpr;
    char filename[SIZE];
    char buffer[SIZE];
    char search[SIZE];
    
    printf("Input file name --> ");
    scanf("%s", filename);

    fpr = fopen(filename, "r");
    
    if( fpr == NULL ){
        printf("Can't open file.\n");
        return 1;
    }

    printf("Input search string --> ");
    scanf("%s", search);
    
    while( fgets( buffer, SIZE, fpr ) != NULL )
    {
        if( strstr(buffer, search) != NULL ){
            printf("%s", buffer);
        }
    }
    
    return 0;
}



No.14827

Re:文書の検索プログラムについて
投稿者---なかはら(2004/06/22 11:23:01)


こんにちは。
なかはらです。

>>「じゃあ、私がサンプルソースでも・・・」といいたいのですが、時間がなくなってきました(マジで)
>
> では私がサンプルソースを。遅かったかな・・・。

ニタチさま、ZAQさま、補足(サンプルソース)ありがとうございます。
しかし、彼はもうこれを見ていないのでしょうね。。。


No.14756

Re:文書の検索プログラムについて
投稿者---RAPT(2004/06/18 23:28:11)


全くわからない人の気持ち考えてください。先生は教えてくれないし、
教科書だけじゃわからない。このままじゃやる気が失われてくと思って、
ここきたんです。
何かね、こういった責任転嫁(ある意味無邪気)な投稿はちょっとどうかなぁ、
とか思ってしまうのです。

果たして、ここで回答している人が、「全くわからない人の気持ち」を考える
必要があるのか、と。むしろ、質問者が回答者の気持ちを汲むことの方が重要
なのではないのか、とか思っているわけです。

C言語に関しての知識と経験はあなたよりも多少はあるかもしれませんが、
ウェブにおける社会人としては対等ではないかと。だとしたら、
「自分の状態を自ら説明をする気はありませんが、私が黙っていても、
 悟ってください。自分はこんなに困っているのです。知識や経験が
 ある人はこんな無力な私を助けて当たり前ではありませんか。」
とか言っているようなもので、これはただの甘えに過ぎないと思います。

特に、独学でやっていて、周りに聞く人も居なくて、ウェブなんていう
恵まれた環境もなく、せいぜい、一冊数千円〜する本がほんの数冊ある
程度で、調べる手がかりすらなく、行き詰まってメーカーに電話してみる
                     # ↑はC言語じゃないけど。
なんて時代、想像できますか?


ここからは、ヒントです。
何でもそうですが、最初は真似っこから始めるといいでしょう。
簡単なサンプルコードを見ないでもコードが書けるようにし、次第に
そのレパートリーを増やします。本などで勉強して得た知識を何度も何度も
コードを起こして、やってみるのです。時にパラメータを変更してみたり、
自分が今まで得た知識を組み合わせてみたりして、確認していくうちに、
基礎は形成されます。そうして、次第に「やり方」を会得できるようになります。

小さい子供が言葉を覚えたり、自転車に乗れるようになったり、スキーが
できるようになったり、サッカーができるようになったり、漢字が書けるようになったり。
これらは、すべて、数多くの反復によって会得した事柄でしょう。

C言語も同様です。何度も何度も繰り返す事で、次第に自力て対処できるようになります。
その第一歩は基礎の反復に他なりません。

(管理人注:以下の部分は投稿者は文字色白で伏字にしていました。管理人の判断でログ化する際に黒字にしました。)
ここからはサンプルコードです。
#include <stdio.h>  /* puts, FILE, fopen, fclose, fgets, printf, BUFSIZ, NULL */
#include <string.h> /* strstr */

void usage()
{
  puts("--使い方--\nプログラム名 <ファイル名> <検索文字列>");
  puts("\tファイル名\t検索先のファイル名");
  puts("\t検索文字列\t検索する文字列");
}

int main(int argc, char *argv[])
{
  FILE *fp = NULL;
  char buff[1 + BUFSIZ];
  int found = 0;

  if(argc < 3){
    usage();
    return 1;
  }
  if((fp = fopen(argv[1],"r")) == NULL){
    printf("%s ファイルが開けない.\n", argv[1]);
    return 1;
  }

  while( fgets(buff, BUFSIZ, fp) != NULL ){
    if(strstr(buff, argv[2]) != NULL){
      found = 1;
      break;
    }
  }
  fclose(fp);
  puts(found ? "あった!" : "ない");

  return 0;
}



No.14757

Re:文書の検索プログラムについて
投稿者---RiSK(2004/06/18 23:33:16)


だからRAPTさん好きです。

# って何のことだ?
## ゴミでした。


No.14854

Re:文書の検索プログラムについて
投稿者---RAPT(2004/06/22 22:38:41)


独り言。
# がんばって書いたんだけどな。
# めずらしく、まともに、きちんと。

## IE6だったら、オプションのユーザ補助の書式設定に全部チェックを
## 入れると、努力の半分は無効になっちゃいますが(;^-^A

まぁ、読んでくれた人が居ただけで嬉しいです。
あとは、本人(スレ主)が気付いていればいいんですけどね。
そこまでのヨミは、まぁあまり期待していないのでいいんですけど(^^;



No.14739

Re:文書の検索プログラムについて
投稿者---shu(2004/06/18 15:36:20)


返信していただいて全然わからない状態から、

> 1からプログラムを作ることができないんです。

ということが、わかりました。(一歩前進)
具体的なプログラムの組みかたがわからないという解釈をさせてもらいました。

いくらプログラムのついての理解度が、八さんより高かったとしても、
八さんについての理解度については皆無なのです。
その上で、私はともかくプログラムがわかっている方々が
あえてサンプルプログラムを載せない理由も、十二分にあるとはずなんです。

サンプルプログラムですが、
まんま、八さんご希望のものがあるかどうかわかりませんが、
過去ログを探せば結構見つかると思います。

見つかったサンプルプログラムについては、

> プログラムを見れば、そこから教科書などで調べて理解することはできます。

でしたよね。