また助言をいただこうと思って書き込みをさせていただきます
件名の通り テキストファイル中の、ある特定の文字列の数行先の行の文字列を抜き出す ということがしたいのですが
今、自分で思いつたのが
void GetInputData(FILE *fp_input, char key[])//key[]は検索キーワード
{
int counter = 0;
int i;
int length = GetFileLength(fp_input); // ファイル全体の大きさを取得する関数
char *str = (char*)calloc(length*2, sizeof(char)); // 念のために多くとっておく
int now_position = ftell(fp_input); // 現在の位置を保存しておく
for (counter = 0;fgets(str, length, fp_input) != NULL; counter++){ // EOFが来るまで一行ずつ読み込む
if(strstr(str,key)){ //キーワードに引っかかったら
for(i=0;counter+2 > i; i++){//(今回の場合は)その次の行までもう一度読み見込む
fgets(str, length, fp_input);}
printf("%s",str);//欲しい行を表示
}
}
fseek(fp_input, now_position, SEEK_SET); // カーソルを最初に保存した位置に戻す
return ;
というような、かなり冗長な内容になってしまいました。このテキストファイルというのがなかなかに膨大なもので、何度も読み込みを繰り返すこのプログラムでは時間がだいぶかかってしまいます。しかもバッファサイズも多めに取らないといけないかなーとか思ったり…
テキストファイルを読み込み、特定の行の次の行(又は数行先)を抜き取るうえで、もっとシンプルな形にするにはどうすればいいでしょうか。
ご助力いただければと思います。
OSはWindows 7 で、Microsoft Visual C++ 2010を使っています。
よろしくお願いいたします。