2011-09-24 81 views
1
12 23 34 45 56 
34 23 56 21 43 
12 57 98 34 12 

以上是txt文件的內容。從文件中讀取數字並將其替換爲另一個數字

使用C,我可以使用fgetc(myFile)來獲得第一個整數並存儲到一個整數變量。

我會檢查它是否是12

如果是12,我想用25來替換我如何準確地更換一定數量。

我如何重寫它的某個部分?

或者我將每個數字存儲到數組中,用另一個數字替換所有12並覆蓋整個文件?

+3

檢查'fgetc'參考,它可以把你的字符,而不是一個整數。還要添加「家庭作業」作爲標記。 –

+0

那麼,如果做得好,可以用'fgetc'來完成,但我懷疑這是這種情況... – littleadv

+0

我知道這是一個角色。但是當我使用整數,它的工作原理..所以..我跳過字符整數部分。 – william

回答

0

將結果保存到另一個文件,而不是重命名它。這段代碼打開homework.txt,替換所有12 - > 25,並寫入結果homework_new.txt

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

#define MAXBUF 42 
#define HOMEWORKFILE "homework.txt" 
#define HOMEWORKNEWFILE "homework_new.txt" 

int main(int argc, char **argv) 
{ 
    char buf[MAXBUF+1]; 
    char str[MAXBUF+1]; 
    FILE *hw; 
    FILE *hw_new; 
    int length; 
    int i, j; 
    int number; 
    char is_first; 
    int n_line = 0; 

    hw = fopen(HOMEWORKFILE, "r"); 
    hw_new = fopen(HOMEWORKNEWFILE, "w"); 

    if (!hw) 
    { 
     fprintf(stderr, "File not found: %s\n", HOMEWORKFILE); 
     return 5; 
    } 

    while(!feof(hw)) 
     if (fgets(buf, MAXBUF, hw) != NULL) 
     { 
      length = strlen(buf); 
      j = 0; 
      str[0] = 0; 
      is_first = 1; 
      n_line++; 
      /* parse string */ 
      for(i = 0; i < strlen(buf); ++i) 
      { 
       if (isblank(buf[i]) || buf[i] == '\0' || buf[i] == '\n') 
       { 
        str[j] = 0; 
        number = atoi(str); 

        if (is_first) 
         is_first = 0; 
        else 
         fprintf(hw_new, " "); 

        if (number == 12) 
         fprintf(hw_new, "%d", 25); 
        else 
         fprintf(hw_new, "%d", number); 

        j = 0; 
       } 
       else if (isdigit(buf[i])) 
       { 
        str[j++] = buf[i]; 
       } 
       else 
       { 
        fprintf(stderr, "bad input on line %d '%s'\n", n_line, buf); 
        return 100; 
       } 
      } 
      fprintf(hw_new, "\n"); 

     } 

    fclose(hw_new); 
    fclose(hw); 
    return 0; 
} 
0

這裏有一個列表:

fgets 
ftell 
fseek 
fputs 

請注意,您需要確保寫入數據的正確長度,以覆蓋正是你想要的。

另一種選擇是,像你說的,覆蓋整個文件,那麼你還需要

freopen 
1

如果它是一個小文件,以覆蓋整個文件是一個好主意,更容易。

如果它不限於c語言,你可以嘗試一些強大的工具,比如「sed」或者一些腳本語言。

+0

+1,用於強大的工具 – pmg

相關問題