ファイル名と検索したい言葉がある行の文章そしてその行の行数を出力するプログラムを作りたいのですが。
できれば前回のプログラムソース(http://www.play21.jp/board/formz.cgi?ac ... &rln=45446)
をもとに作るようなソースコードがいいです。
#include<stdio.h>
int main(void)
{
char ch;
FILE *fp;
char fname[99]; /*検索したいファイル名*/
char word[99]; /*検索したい文字列*/
char string[1024];
int i, j, n, s, count;
int count2 = 0;/*行の文字数*/
int count3 = 0;/*forループ用*/
int flag = 0;
i = 0;/*行数用の数字*/
j = 0;/*j番目の文字列*/
n = 0;/*検索したい文字列が何文字あっているか?*/
s = 0;/*検索したい文字列の文字数*/
count = 0;
printf("FILEname?\n");
scanf("%s", fname);
printf("検索したい文字は?");
scanf("%s", word);
while(1){ /*検索したい文字列は何文字か判定する*/
if(word[j] == '\0')/*ヌル文字があったら測定終了*/
break;
s++;
j++;
}
j = 0;/*また1文字目からやり直すためにいったんリセット*/
if((fp = fopen(fname, "r")) == NULL)/*検索したいファイル名は存在しますか?*/
printf("ERROR");
else{
/*最初の行数*/
i++;
while((ch = fgetc(fp)) != EOF){
string[count2] = ch;
count2++;
if(count == 0){/*1文字前の判定1文字前が検索したい文字列の中の1文字でないなら検索したい文字列の1文字目からやり直し*/
j = 0;
n = 0;
}
if(ch == word[j])/*検索したい言葉のj番目とおなじもじですか?*/
{
n++;/*同じ文字かの正解数を1つあげる*/
count++;/*現在の文字が正解か否かの判定*/
j++;/*検索したい次の文字にチャレンジする*/
}
else{
count = 0;/*不合格なので検索したい最初の文字からやり直し*/
}
if(s == n){/*もし検索したい文字数と正解数が一緒ならその行を出力しなさい*/
printf("%d:", i);
flag = 1;
j = 0;
n = 0;
}
if(ch == '\n'){/*もし改行なら行番号をあげなさい*/
i++;
string[count2] = '\0';
if(flag == 1){
count3 = 0;/*forループにしよう*/
for(; count3 < count2 + 1; ++count3)
{
printf("%c", string[count3]);
}
}
count2 = 0;
flag = 0;
}
}
fclose(fp);
}
return 0;
}
まずはファイルを一つではなく全対象にする方法をお願いしますコンパイラはGCC
技術レベルはfopenが使える程度です。