2011-03-30 103 views
0

喜逢身體 可以有一個人幫助我與THI問題 我有這是繼C文件處理問題

hi Hello this is my Hello to 
the Hello world 

這是繼

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

void main() 
{ 
    FILE *fp,*fout; 
    int i=0,len_string; 
    char SearchText[]="Hello"; /* You can replace this text */ 
    char ReplaceText[]="Help"; /*You can also replace this text. */ 
    char temp[30]; 
    fp=fopen("ram.txt","a+"); 
    fout=fopen("temp.txt","a+"); 
    rewind(fp); /* for going to start of file. */ 
    if(fp==NULL || fout==NULL) 
    { 
     printf("File couldn't be opened "); 
     exit(0); 
    } 
    len_string=strlen(SearchText); 
    while(!feof(fp)) 
    { 
     for(i=0;i<len_string;i++) 
     { 
      temp[i]=fgetc(fp); 
     } 
     temp[i]='\0'; 
     if(strcmp(SearchText,temp)==0) /* the stricmp() is used for comparing both string. */ 
     { 

      fprintf(fp,"%s ",ReplaceText); 
      fprintf(fout,"%s",ReplaceText); 
      fflush(fp); 
      fclose(fp); 
      fclose(fout); 
      exit(1); 
     } 
    } 
    fclose(fp); 
    fclose(fout); 
} 
一個文本文件,我用C編寫代碼

現在我出來放就是這樣

hi Hello this is my Hello to 
the Hello world 

幫助幫助 我做錯了什麼? 如何替換你好,以幫助我的文本文件? 如何獲得我的輸出?

hi Help this is my Hello to 
the Help world 

任何人都可以用代碼解釋嗎?

+2

main'的'返回類型'int'。另外,請嘗試縮進您的代碼。 – 2011-03-30 13:26:26

+0

是爲了你自己的原因縮進你的代碼 – Blorgbeard 2011-03-30 13:26:54

+0

什麼是'temp.txt'應該做什麼? – nmichaels 2011-03-30 13:30:36

回答

2

您在5個字符組中搜索字符串「Hello」。所以你正在看你的文件是這樣的:

hi He 
llo t 
his i 
s my 
Hello 
to\n 
the H 
ello 
world 

其中只有一個匹配你在找什麼。您應該逐行讀取文件(使用更大的緩衝區以防萬一),並在每行上搜索/替換您的搜索文本。

此外,您在退出時失敗0,在成功時退出1(這是倒退; 0表示成功,其他任何事情都意味着失敗,傳統上)。而你在第一場比賽後退出,而不是繼續尋找更多。

要通過線線讀取並執行搜索/替換,做這樣的事情:

FILE *f = ...; 
char buf[1024]; 
while (fgets(buf, sizeof(buf), f)) { 
    char *pos; 
    while ((pos = strstr(buf, search)) != NULL) { 
     char temp = *pos; 
     *pos = 0; 
     fprintf(out, "%s%s", buf, replace); 
     *pos = temp; 
     buf = pos + strlen(search); 
    } 
    fprintf(out, "%s", buf); 
} 

這不是理想的,由於路線長(> 1023字)將得到切成片,可能在搜索標記的中間,但它在大多數情況下都可以使用。

+0

請解釋我hoew逐行閱讀和搜索所需的字符串 – user513164 2011-03-31 02:58:24

0

你已經逐行讀入一個臨時字符數組,並用strstr找到你好,那麼事情會更快.. 檢查strstr函數。

+0

請你可以用代碼解釋 – user513164 2011-03-31 02:59:37

0
#include <stdio.h> 
#include <string.h> 
#define BUF_LEN 100 
#define STR_REQ "Hello" 
main() 
{ 
    FILE * read_file, * write_file; 
    read_file = fopen("file_read.dat", "r"); 
    if(read_file == NULL) 
    { 
     perror("Unable to open file for reading"); 
     exit(-1); 
    } 
    else 
    { 
     write_file = fopen("file_write.dat", "w"); 
     if(write_file == NULL) 
     { 
      perror("Unable to open file for writing"); 
      exit(-1); 
     } 
     else 
     { 
      char temp_buf[BUF_LEN], req_buf[BUF_LEN+strlen(STR_REQ)+10]; 
      char * index; 
      while(!feof(read_file)) 
      { 
       memset(temp_buf, 0, BUF_LEN); 
       fscanf(read_file, "%[^\n]", temp_buf); 
       fgetc(read_file);   /*To remove \n at last*/ 
       index = strstr(temp_buf, STR_REQ); 
       if(index !=NULL) 
       { 

        memset(req_buf, 0, BUF_LEN+strlen(STR_REQ)+10); 
        //strncpy(req_buf, temp_buf, index-temp_buf); 
        memcpy(req_buf, temp_buf, index - temp_buf);    /*This will copy upto the match*/ 

        strcat(req_buf, "Help ");           /*Copy the help word*/ 

        strcat(req_buf, index+strlen(STR_REQ)); 

       } 
       else 
       { 
        strcpy(req_buf, temp_buf); 
       } 
       fprintf(write_file, "%s\n", req_buf); 
      } 

     } 
    } 
} 

有這樣的代碼..它應該工作...如果你有任何問題,你可以問我