/* フロッピーに保存されたファイル"a.dat"の中から、 */
/* キーボードから入力される文字列を含むレコードを */
/* 検索し、文字列が一致したレコードをディスプレイに */
/* 出力する。 */
/* なお、ファイル"a.dat"の各レコードは、'改行'で */
/* 区切られ、最後は'!'で終わるものとする。 */
#include< stdio.h >
#define M 50 /* レコード1個文字列の最大文字数 */
#define N 40 /* 照合文字列の最大文字数 */
main(){
FILE *fp; /* 検索対象の読込用ファイル */
int i,k; /* カウント用変数 */
int j; /* 検索されたレコードの個数 */
int l; /* 検索対象レコードの個数 */
int m; /* レコード文字列の文字数 */
int n; /* 照合文字列の文字数記憶用変数 */
char c; /* 読込文字一時記憶用変数 */
char a[N]; /* 照合文字列の記憶用 */
char b[M]; /* データ1個文字列の記憶用 */
fp=fopen("F:\a.dat","r"); /* F:フロッピードライブ */
for(i=0;i<=N-1;i++){
a[i]=' ';
}
printf("\n検索文字列 = ?");
i=0;
while((c=getchar())!='\n'){
a[i]=c;
i++;
}
n=i;
j=0;l=0;
fscanf(fp,"%c",&c);
while(c!='!'){
for(i=0;i<=M-1;i++){
b[i]=' ';
}
i=0;
while(c!='\n'){
b[i]=c;
i++;
fscanf(fp,"%c",&c);
}
m=i;
if(n<=m){
for(k=0;k<=m-n;k++){
for(i=0;i<=n-1;i++){
if(a[i]!=b[k+i])break;
}
if(i==n)break;
}
if(i==n){
for(k=0;k<=m-1;k++){
printf("%c",b[k]);
}
j++;
}
}
l++;
fscanf(fp,"%c",&c);
}
printf("\n一致したレコードの個数 = %3d (in %3d )\n",j,l);
fclose(fp);
}