12 23 34 45 56
34 23 56 21 43
12 57 98 34 12
以上是txt文件的内容。
使用C,我可以使用fgetc(myFile)
获取第一个整数并存储到整数变量中。
我会检查它是否是12。
如果是12,我想用25替换。我如何完全取代某个数字。
我如何重写其中的某一部分?
或者我将每个数字存储到一个数组中,用另一个数字替换所有12个数字并覆盖整个文件??
答案 0 :(得分:1)
如果它是一个小文件,覆盖整个文件是一个好主意,更容易。
如果它不受c语言限制,您可以尝试使用强大的工具,如“sed”或某些脚本语言。
答案 1 :(得分:0)
这是一个清单:
fgets
ftell
fseek
fputs
请注意,您需要确保所写数据的正确长度,以便准确覆盖您想要的内容。
如您所说,另一种选择是覆盖整个文件,那么您还需要
freopen
答案 2 :(得分: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;
}