从文件中读取数字并将其替换为其他数字

时间:2011-09-24 07:50:00

标签: c

12 23 34 45 56
34 23 56 21 43
12 57 98 34 12

以上是txt文件的内容。

使用C,我可以使用fgetc(myFile)获取第一个整数并存储到整数变量中。

我会检查它是否是12。

如果是12,我想用25替换。我如何完全取代某个数字。

我如何重写其中的某一部分?

或者我将每个数字存储到一个数组中,用另一个数字替换所有12个数字并覆盖整个文件??

3 个答案:

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