C言語関係掲示板

過去ログ

No888 ファイルを開き単語を検索

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

ファイルを開き単語を検索
投稿者---優太郎(2003/08/05 21:43:16)


任意のファイルを開き、その中から任意の単語を検索する場合は、どうやったらよいのですか?そして、検索した単語とその単語の存在する個数をファイル「log.txt」に保存するにはどうしたらよいのですか?ファイルを開いたり、閉じたりするのは分かるのですが、検索と、保存の仕方が、分かりません。どうかご指導のほどよろしくお願いします。

No.378

Re:ファイルを開き単語を検索
投稿者---nop(2003/08/05 23:35:42)


>任意のファイルを開き、その中から任意の単語を検索する場合は、どうやったらよいのですか?そして、検索した単語とその単語の存在する個数をファイル「log.txt」に保存するにはどうしたらよいのですか?ファイルを開いたり、閉じたりするのは分かるのですが、検索と、保存の仕方が、分かりません。どうかご指導のほどよろしくお願いします。

検索は、全ファイル内容をメモリに読み込んでしまえば、
strstr() で可能です。
保存はファイルを書き込みモードを開き、
そのファイルディスクリプタを使って、
fprintf() や fputchar() などのストリーム出力関数で書き込めます。

No.385

Re:ファイルを開き単語を検索
投稿者---優太郎(2003/08/07 22:02:08)


自分で考えたのですが、strstr()や、fpruntf(),fputcharをどこに加えたらよいのか分かりません。どうか、ご指導のほどよろしくお願いします。
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	FILE *fp;	/* (1)ファイルポインタの宣言 */
	char name[256];
	printf("ファイル名を入力して下さい->");
	gets(name);
	/* (2)ファイルのオープン */
	/*  ここで、ファイルポインタを取得する */
	if ((fp = fopen(name, "r")) == NULL) {
		printf("file open error!!\n");
		exit(1);	/* (3)エラーの場合は通常、異常終了する */
	}
	while(fgets(name,256,fp)!=NULL){
		printf("%s",name);
	}
	
	fclose(fp);	/* (5)ファイルのクローズ */
	
	return 0;
}




No.386

Re:ファイルを開き単語を検索
投稿者---かずま(2003/08/07 22:45:19)


> 自分で考えたのですが、strstr()や、fpruntf(),fputcharをどこに
> 加えたらよいのか分かりません。

fpruntf() や fputchar() という関数はありません。

また、strstr() を使うと hat という単語を探すつもりでも、
that や what がひっかかってしまいます。

単語を読み込んで、strcmp() で比較しましょう。
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *fp;  char word[100];  int n, count = 0;

    if (argc != 3)
        return printf("usage: %s word filename\n", argv[0]), 1;

    fp = fopen(argv[2], "r");
    if (fp == NULL) return printf("can't open %s\n", argv[2]), 1;
    while ((n = fscanf(fp, "%*[^a-zA-Z]%99[a-zA-Z]", word)) != EOF)
        if (n == 1 && strcmp(word, argv[1]) == 0) count++;
    fclose(fp);

    fp = fopen("log.txt", "w");
    if (fp == NULL) return printf("can't create log.txt\n"), 1;
    fprintf(fp, "%d\n", count);
    fclose(fp);

    return 0;
}


No.388

Re:ファイルを開き単語を検索
投稿者---優太郎(2003/08/08 12:36:53)


それでは、検索したい単語を入力させる場合はどうしたら良いのですか?

No.390

Re:ファイルを開き単語を検索
投稿者---かずま(2003/08/08 12:58:00)


>   while ((n = fscanf(fp, "%*[^a-zA-Z]%99[a-zA-Z]", word)) != EOF)
>       if (n == 1 && strcmp(word, argv[1]) == 0) count++;

訂正です。

    for (;;) {
        fscanf(fp, "%*[^a-zA-Z]");
        if (fscanf(fp, "%99[a-zA-Z]", word) != 1) break; 
        if (strcmp(word, argv[1]) == 0) count++;
    }


No.396

Re:ファイルを開き単語を検索
投稿者---優太郎(2003/08/08 14:04:37)


検索したい単語をキーボードから入力させたい場合、どうすればよいのですか?