12 23 34 45 56
34 23 56 21 43
12 57 98 34 12
以上是txt文件的內容。從文件中讀取數字並將其替換爲另一個數字
使用C,我可以使用fgetc(myFile)
來獲得第一個整數並存儲到一個整數變量。
我會檢查它是否是12
如果是12,我想用25來替換我如何準確地更換一定數量。
我如何重寫它的某個部分?
或者我將每個數字存儲到數組中,用另一個數字替換所有12並覆蓋整個文件?
12 23 34 45 56
34 23 56 21 43
12 57 98 34 12
以上是txt文件的內容。從文件中讀取數字並將其替換爲另一個數字
使用C,我可以使用fgetc(myFile)
來獲得第一個整數並存儲到一個整數變量。
我會檢查它是否是12
如果是12,我想用25來替換我如何準確地更換一定數量。
我如何重寫它的某個部分?
或者我將每個數字存儲到數組中,用另一個數字替換所有12並覆蓋整個文件?
將結果保存到另一個文件,而不是重命名它。這段代碼打開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;
}
這裏有一個列表:
fgets
ftell
fseek
fputs
請注意,您需要確保寫入數據的正確長度,以覆蓋正是你想要的。
另一種選擇是,像你說的,覆蓋整個文件,那麼你還需要
freopen
檢查'fgetc'參考,它可以把你的字符,而不是一個整數。還要添加「家庭作業」作爲標記。 –
那麼,如果做得好,可以用'fgetc'來完成,但我懷疑這是這種情況... – littleadv
我知道這是一個角色。但是當我使用整數,它的工作原理..所以..我跳過字符整數部分。 – william