【发布时间】:2016-11-05 09:06:39
【问题描述】:
我正在尝试处理文件。我需要管理一个 *.txt 文件,我必须使用关键字搜索特定行,然后编辑该行的某些字段。
MyFile.txt 包含:
命名点胜负平局
Mark 4 1 0 1
Kevin 6 2 1 0
Phill 10 3 0 1
Tony 13 4 1 1
Dan 12 3 2 3
-END-
在哪里:名字是我的关键词,我必须编辑点数、胜负和平局。
void Update (int Result, char User[15])
{
struct Giocatore Player;
int temp;
FILE *fp;
fp=fopen("MyFile.txt","r+");
if(fp==NULL)
{
printf("ERROR.");
}
else
{
//reading first line of txt
fscanf(fp,"%s %d %d %d %d",Player.Name,&Player.pts,&Player.wins,&Player.loss,&Player.tie);
do
{
if(strcmp(Player.Name, User)==0) //finding the username got from main.
{
if(Result==1) //win root
{
Player.Wins++;
Player.pts=(Player.wins*3)+Player.tie;
fprintf(fp,"%s %d %d %d %d",Player.Name,Player.pts,Player.wins,Player.loss,Player.tie);
}
else if(Result==0) //Tie root
{
Player.tie++;
Player.pts=(Player.wins*3)+Player.tie;
fprintf(fp,"%s %d %d %d %d",Player.Name,Player.pts,Player.wins,Player.loss,Player.tie);
}
else if(Result==2) //loss root
{
Player.loss++;
fprintf(fp,"%s %d %d %d %d",Player.Name,Player.pts,Player.wins,Player.loss,Player.tie);
}
}
fscanf(fp,"%s %d %d %d %d",Player.Name,&Player.pts,&Player.wins,&Player.loss,&Player.tie);
temp=strcmp(Player.Name,"-END-");
} /* end while*/
while(temp!=0);
fclose(fp);
}
}
我正在使用我制作的这段代码,但它不起作用,我能够找到用户名,但我无法更新它。
感谢您的帮助
【问题讨论】:
-
阅读全部 -> 更新 -> 全部写入
-
考虑到行大小可能会有所不同(我假设数字可能会增加到两个或更多)我认为做你想做的唯一方法是在解析期间将整个文件加载到内存中然后重写里面的全部内容
-
如您所见,我正在将其加载到结构记录中,每个字段都有一个与下一个字段相隔的空格,它适用于搜索和打印。
标签: c file search replace updates