C言語-ファイル処理 |
2.1 テキストファイルの読み込み (4)
指定した文字列を含む行を表示する。[pro2-7.c]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STR_MAX 256
int main(void)
{
FILE *fp;
char fname[80];
char buff[STR_MAX];
char srch[STR_MAX];
printf("ファイル名 : ");
gets(fname);
printf("検索文字列 : ");
gets(srch);
if((fp = fopen(fname, "r")) == NULL){
printf("ファイルがオープンできません\n");
exit(1);
}
while(fgets(buff, STR_MAX, fp) != NULL)
if(strstr(buff, srch) != NULL) /* 検索 */
printf("%s", buff);
fclose(fp);
return(0);
}
|
ファイル名 : pro1-1.c |
【練習問題2-16】 pro2-7.cに指定した文字列を含む行数を表示する処理を追加しなさい。
ファイル名 : pro1-1.c |
指定した文字列を検索し、その個数を表示する。[pro2-8.c]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define STR_MAX 256 int main(void) { FILE *fp; char fname[80]; char buff[STR_MAX], srch[STR_MAX]; char *sstart; /* 検索開始アドレス用 */ int count = 0; /* カウント用 */ printf("ファイル名 : "); gets(fname); printf("検索文字列 : "); gets(srch); if((fp = fopen(fname, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } while(fgets(buff, STR_MAX, fp) != NULL){ sstart = buff; /* 検索開始アドレス設定 */ while(1){ sstart = strstr(sstart, srch); if(sstart != NULL){ ++count; /* ↓検索開始アドレス再設定 */ sstart = sstart + strlen(srch); /* ←訂正 */ if(*sstart == '\0') break; }else break; } } printf("発見した文字列の個数=%d\n", count); fclose(fp); return(0); } |
ファイル名 : pro2-8.c |
Copyright © 2001-2003 Hiroshi Masuda |