/*  フロッピーに保存されたファイル"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);
}