将文件指针移回已读取的字符串

时间:2013-12-11 04:47:14

标签: c

我正在尝试从文件中查找特定单词并将其替换为其他单词。

#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移回到准确指向它已经读过的字符串。

2 个答案:

答案 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);
}