※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

#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");
			}
		}
	}
}