C言語関係掲示板

過去ログ

No817 テキストファイルから指定した文字列を含む文を抜き出す

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

次の文に進めません。
投稿者---緑茶(2003/11/07 01:42:10)


テキストファイルから指定した文字列を含む文を抜き出そうとしているんですが、つまずいています。教えてください。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define STR 256
int main(void)
{
FILE *fp_input;
FILE *fp_output;
char buf[STR];
char mojiretu[16];
int i;

printf("検索する文字列="); //文字列の入力
scanf("%s", mojiretu);

fp_input = fopen("input.txt","r"); //ファイルのオープン
if(fp_input == NULL)
{
printf("ファイルが開けません\n");
return(1);
}

fp_output = fopen("output.txt","w"); //ファイルのオープン
if(fp_output == NULL)
{
printf("ファイルが開けません\n");
return(1);
}
/* この部分がうまくいきません */
for( i = 0; !feof(fp_input) && buf[i] != '.'; i++ )
{
buf[i] = fgetc(fp_input);
}
if(strstr(buf,mojiretu)!=NULL)
{
fprintf(fp_output,"%s\n",buf);
}

fclose(fp_input);
fclose(fp_output);
return(0);
}

No.10347

Re:ファイルから指定した文字列を含む文を抜き出す
投稿者---ともじ(2003/11/07 09:05:16)


おはようございます。

>テキストファイルから指定した文字列を含む文を抜き出そうとしているんです
>が、つまずいています。教えてください。

/* この部分がうまくいきません */
        	for( i = 0; !feof(fp_input) && buf[i] != '.'; i++ )
        	{
	        	buf[i] = fgetc(fp_input);
	}
	if(strstr(buf,mojiretu)!=NULL)
        	{               
        	        	fprintf(fp_output,"%s\n",buf);
        	}

の部分を
	while (fgets(buf, sizeof(buf), fp_input) != NULL)
	{
		if(strstr(buf,mojiretu)!=NULL)
        	        	{               
        	    	        	fprintf(fp_output,"%s",buf);
        	        	}
	}
に替えて下さい。
fgetsは'\n'も読み込むので、fprintfでは'\n'を省きました。

それから、上記【掲示板ご利用上の注意】をお読みの上、適切な題名と
ソースのインデントを付けてくださるようにお願いします。



No.10358

Re:ファイルから指定した文字列を含む文を抜き出す
投稿者---緑茶(2003/11/07 23:37:37)


レスありがとうございます。不適切な題名&&ソースの添付ですいませんでした。
while (fgets(buf, sizeof(buf), fp_input) != NULL)
{
if(strstr(buf,mojiretu)!=NULL)
{
fprintf(fp_output,"%s",buf);
}
}
この部分に関してなんですが、単語を含む行を抜き出してしまいます。
単語を含む文を抜き出したいので、fgetcでコンマまで読み取るように考えてみました。良い例をご教授おねがします。


No.10370

Re:ファイルから指定した文字列を含む文を抜き出す
投稿者---ともじ(2003/11/08 15:16:56)


失礼しました。「文」でしたね。
文の長さが長い場合を考えて、reallocでメモリを増やしながら'.'が来るまで
読み込むようにしました。'.'で終わらない場合は、文とは見なしません。
また、改行は含めませんでした。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define STR 256

int main(void) 
{
    FILE *fp_input;
    FILE *fp_output;
    char *sentence = NULL;
    char mojiretu[16];
    int i = 0, c;

    printf("検索する文字列=");     //文字列の入力
    scanf("%15s", mojiretu);

    if ((fp_input = fopen("input.txt","r")) == NULL) {     //ファイルのオープン
        printf("ファイルが開けません\n");
        return(1);
    }
    if ((fp_output = fopen("output.txt","w")) == NULL) {     //ファイルのオープン
        printf("ファイルが開けません\n");
        return(1);
    }
    
    while ( (c=fgetc(fp_input)) != EOF) {
        if ((i % STR) == 0)
            sentence = (char *) realloc(sentence, STR*(i/STR+1));
        if (c != '\n') sentence[i++] = c;
        if (c == '.') {
            sentence[i] = '\0';
            if(strstr(sentence,mojiretu) != NULL) {               
                fprintf(fp_output, "%s\n", sentence);
            }
            free(sentence);
            sentence = NULL;
            i = 0;
        }
    }
    free(sentence);

    fclose(fp_input);
    fclose(fp_output);
    return(0);
}



No.10372

Re:ファイルから指定した文字列を含む文を抜き出す
投稿者---緑茶(2003/11/08 17:08:03)


reallocなど初めて見るものもあるので、
調べつつ理解していきます。
返信ありがとうございました。