如何编辑特定行C的文本文件

时间:2013-10-15 13:44:15

标签: c file-io

我目前在Windows XP中使用MinGW。

我编写了一个程序,它接受用户的输入并通过

将它们放入.txt文件中
typedef struct data_base{
    char name[254];
    int age;
    int postalcode;
    struct data_base *next;
}person;

我想知道是否有办法编辑.txt文件的数据。

例如,在.txt文件中,我有3组基于用户输入的数据:

Steven    //name
19        //age
1100      //postal code
Jack 
24
2203
Mary
21
0109

我会询问用户他希望编辑哪组数据。然后在获取编辑后的数据后,我希望在用户选择的特定集合的.txt文件中覆盖该数据。


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

typedef struct data_base{
    char name[254];
    int age;
    int postalcode;
    struct data_base *next;
}person;

void read()
{
person *curr[20];
int count = 0;
FILE *f;
int editchoice = 0;

f = fopen("personfile.txt","r+");
// Read the data in the file based on user's input

//Display the names: 1. Steven 2.Jack  3.Mary
printf("Editing Whose Data?: \n");
scanf("%d",&editchoice);    

printf("New name: \n");
scanf("%s",&curr[editchoice]->name);
fprintf(f,"%s\n",curr[editchoice]->name);

printf("New age: \n");
scanf("%d",&curr[editchoice]->age);
fprintf(f,"%d\n",curr[editchoice]->age);

printf("New name: \n");
scanf("%d",&curr[editchoice]->postalcode);
fprintf(f,"%d\n",curr[editchoice]->postalcode);

}

我预计数据会被覆盖但不会发生。 (抱歉是初学者。)

2 个答案:

答案 0 :(得分:0)

是的,你几乎就在那里。

对我来说,你有两个选择。 或者您将内容(在列表中)中以及将列表转储到文件中后更改该文件。 或者您更改文件并将文件重新读入内存(到该列表)。

您可以通过将文件光标定位在要更改和更改的数据的开头来更改文件中的数据,但是您还应该更新内存中的数据。

我对这个问题的处理方法是:

编写一个函数,在文件中为“id”位置提供一个人块,这样就可以将人数据读写到文件中。

答案 1 :(得分:0)

您可以从文件中读取,然后将结果写入另一个文件。

按记录读取记录,

如果记录中有您想要更改的人,请更改

然后

在将记录读入tmp文件时转储​​记录,这将包括发生时更改的记录。

然后关闭两个文件,remove旧文件,rename tmp文件。