#99 Article 1007 Posted at 1995/12/10 00:52:16 by MSP-Iris (MAP4370) [SAHOU.2]
Subject: Re: プログラミング作法・お題2 /995
とりあえずC。
1論理行は何文字でもかまいません。読み込みの途中で検索文字列が切れたり
しないように、検索文字数-1だけ戻してから次を読みます。
バイナリオープンになっているのは fseek の動作のためです。
...バイナリオープンしたら論理行もくそもないやんけ(笑)。
--------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RBYTE 256
int fbingets (s,n,f) char *s; int n; FILE *f; { /* fgets-like */
/* binary read */
char b; int i;
if(n<=1)
return(EOF);
if((b=fgetc(f))==EOF)
return(EOF);
*s=b;
for(i=1;i<n-1;i++)
{
if((b=fgetc(f))==EOF)
break;
*(s+i)=b;
}
*(s+i)='\0';
return(0);
}
main () {
long cnt; char buf[RBYTE],*bufp;
FILE *fn;
static char *SEARCHSTRG="MAPLE";
static char *SEARCHFILE="LOG";
static int SBYTE;
cnt=0; SBYTE=strlen(SEARCHSTRG);
if((fn=fopen(SEARCHFILE,"rb"))==NULL)
abort;
while(fbingets(buf,RBYTE,fn)!=EOF)
{
bufp=&buf[0];
while((bufp=strstr(bufp,SEARCHSTRG))!=NULL)
{
cnt++;
bufp++;
}
if(strlen(buf)>=SBYTE)
fseek(fn,-(long)SBYTE+1L,SEEK_CUR);
}
printf("楓が%ld本\n",cnt);
}
--------------------------------------
MAP4370 MSP-Iris