我正在尝试从文件中查找特定单词并将其替换为其他单词。
#include <stdio.h>
int main() {
FILE *fr;
fpos_t pos;
char temp[20];
fr = fopen("filename_to_open","r+");
while(!feof(fr)) {
fgetpos(fr , &pos);
fscanf(fr, "%s", temp);
if(strcmp(temp,"word_to_find") == 0) {
fsetpos(fr, &pos);
fprintf(fr, "word_to_replace_with");
}
}
}
读完字符串后,我将它与字符串进行比较。如果它匹配我想要替换它。我尝试使用fgetpos(),fputpos(),fseek()。我没有得到所需的输出。如何将filepointer移回到准确指向它已经读过的字符串。
答案 0 :(得分:4)
您可以使用
fseek(fr, -strlen(temp), SEEK_CUR)
回到单词的开头。所以整个功能将是:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *fr;
char temp[20];
fr = fopen("file_to_open","r+");
while(fscanf(fr, "%s", temp) != EOF) {
if(strcmp(temp,"cat") == 0) {
fseek(fr, -strlen(temp), SEEK_CUR);
fprintf(fr, "dog");
}
}
return 0;
}
正如Rob Starling所说,这只有在替换字的长度与原始字相同时才有效。
答案 1 :(得分:0)
使用此代码可以正常使用
#include <stdio.h>
int main() {
FILE *fr;
fpos_t pos;
int c;
char temp[20];
fr = fopen("filename_to_open","r+");
do {
fgetpos(fr , &pos);
c = fscanf(fr,"%s",temp); /* got one word from the file */
// printf("%s\n",temp); /* display it on the monitor */
if(strcmp(temp,"word_to_find") == 0) {
fsetpos(fr, &pos);
fprintf(fr, "word_to_replace_with");
}
} while (c != EOF);
}