#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_SIZE 256
#define CMD_SIZE 100
extern FILE *txtfile;
//単語検索その1・・・単語を含んだ文字列の検索。例えばprogramを検索するならprogramingも表示する
void word_search1(char *txtname)
{
int i , j , k , l = 0 ;
int line[1000] ; //単語出現数は1000回まで
char str[LINE_SIZE], word[CMD_SIZE];
printf("検索したい文字列を入力して下さい\n");
fgets(word, CMD_SIZE, stdin); //単語のサイズは99まで
for(i=1;!feof(txtfile);i++) //1行読み込む毎にiをカウント
{
fgets(str,LINE_SIZE,txtfile); //まず一行全部読み込む
for(j=0;str[j]!='\n';j++) //読み込んだ行の中に単語が含まれていないか探す
{
if( str[j] == EOF )
break;
for(k=j;word[k-j]==str[k];k++)
{
if(word[k-j+1]=='\n') //含まれていたら
{
line[l] = i ; //その行番号をline[]に入れる
l++;
}
}
}
for(k=0;k<j;k++)
{
str[k] = '\0' ;
}
}
txtfile = freopen(txtname,"r",txtfile);
//line[]に入れた行番号からその行を出力する
for(i=0;i<l;i++)
{
if( i == 0 )
{
for(j=1;j<=line[0];j++)
fgets(str,LINE_SIZE,txtfile);
k = line[0];
printf("%d : %s",line[0],str);
if( feof(txtfile) )
{
printf("\n");
}
}
else if( line[i] != line[i-1] ) //1行にいくつもある場合はとばす
{
for(j=k+1;j<=line[i];j++)
fgets(str,LINE_SIZE,txtfile);
k = line[i];
printf("%d : %s",line[i],str);
if( feof(txtfile) )
{
printf("\n");
}
}
}
}
//単語検索その2・・・単語そのものの検索。例えばprogramを検索するのにprogramingを検索してしまわないようにしている。
void word_search2(char *txtname)
{
int i , j , k , l = 0 ;
int line[1000] ; //単語出現数は1000回まで
char str[LINE_SIZE], word[CMD_SIZE];
printf("検索したい単語を入力して下さい\n");
fgets(word, CMD_SIZE, stdin); //単語のサイズは99まで
for(i=1;!feof(txtfile);i++) //1行読み込む毎にiをカウント
{
fgets(str,LINE_SIZE,txtfile); //まず一行全部読み込む
for(j=0;str[j]!='\n';j++) //読み込んだ行の中に単語が含まれていないか探す
{
if( str[j] == EOF )
break;
for(k=j;word[k-j]==str[k];k++)
{
if(word[k-j+1]=='\n') //含まれていたら
{
if( j == 0 || str[j-1] == ' ' ) //この2行でそれが単語そのものか判定
if( str[k+1] == ' ' || str[k+1] == '\n' || str[k+1] == EOF )
{
line[l] = i ; //その行番号をline[]に入れる
l++;
}
}
}
}
for(k=0;k<j;k++)
{
str[k] = '\0' ;
}
}
txtfile = freopen(txtname,"r",txtfile);
//line[]に入れた行番号からその行を出力する
for(i=0;i<l;i++)
{
if( i == 0 )
{
for(j=1;j<=line[0];j++)
fgets(str,LINE_SIZE,txtfile);
k = line[0];
printf("%d : %s",line[0],str);
if( feof(txtfile) )
{
printf("\n");
}
}
else if( line[i] != line[i-1] ) //1行にいくつもある場合はとばす
{
for(j=k+1;j<=line[i];j++)
fgets(str,LINE_SIZE,txtfile);
k = line[i];
printf("%d : %s",line[i],str);
if( feof(txtfile) )
{
printf("\n");
}
}
}
}
最終更新:2007年08月02日 08:33