|
お世話になります。
ファイル(aファイル)を読みとって新しいファイル(bファイル)として出力したあとに
もう一度そのbファイルを操作しようと試みているのですが
なかなかうまく行きません
fopen 関数の説明を読むと
「更新モードでオープン('+'がmodeの2番目または3番目の文字である場合)されたファイルに結び付けられた
ストリームに対しては、入力操作と出力操作を許す。ただし、出力操作の後に入力操作を行う場合、この二つの操作の間にファイル位置付け関数(fseek、fsetposもしくはrewind)を呼び出さなければならない。」
とあったので rewind 関数を使って、ファイル位置表示子を先頭にしてみたのですが、うまく動作しません。(していない気がします)
以下、ソースを載せてみますのでよろしくお願いします。
#include <stdio.h>
#include <string.h>
void func1(FILE* fin, FILE* fout); //EOS(改行文字)を取る
int main(void)
{
FILE* fin;
FILE* fout;
char infile[64];
char outfile[64];
printf("INファイル名-->");
scanf("%s", infile);
fin = fopen(infile, "r");
if(fin == NULL){
printf("ファイルがありません\n");
return 1;
}
printf("OUTファイル名-->");
scanf("%s", outfile);
fout = fopen(outfile, "w+");
func1(fin, fout);
fclose(fin);
fclose(fout);
return 0;
}
/*形態素解析結果からEOSを省く処理*/
void func1(FILE* fin, FILE* fout)
{
char temp1[64];
char temp2[64];
char temp3[64];
while(fscanf(fin, "%s", temp3) != EOF){
if(!strcmp(temp3, "EOS"))
continue;
else
fprintf(fout, "%s ", temp3);
}
rewind(fout); //ファイル位置表示子を先頭に戻してるつもり
/*EOSを除いた文書から必要な品詞を取り出す*/
while(fscanf(fout, "%s%s", temp1, temp2) == 2){
if(!strncmp(temp2, "名詞", 2) || !strncmp(temp2, "形容詞", 3))
fprintf(fout, "%s ", temp1);
if(!strncmp(temp2, "動詞", 2))
fprintf(fout, "%s", temp1);
}
}
|