2
ファイルを処理しようとしています。私は* .txtファイルを管理する必要があります、私はキーワードを使用して特定の行を検索し、この行のいくつかのフィールドを編集する必要があります。* .txtファイルの1行の検索と更新 - C言語
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);
}
}
私はこのコードを使用していますが、動作しません。ユーザー名は見つかりますが、更新できません。あなたは行番号を保存し、新しい内容でファイルのコピーを書くために行番号を使用することができます
はすべてを読んで(ケビンのスコアが更新されました)プログラムの実行後のoutput.txtファイル] - > [更新] - > [すべての – BLUEPIXY
があることを考慮すると、書き込み行のサイズが変わることがあります(数字の数字が2つ以上に増える可能性があると仮定します)。あなたが望むことを行う唯一の方法は、解析中にファイル全体をメモリにロードしてから、全体の内容を書き換えることです。 – Carlo
私はstructレコードにロードしているのが分かるように、各フィールドには次のスペースとスペースがあり、検索と印刷に使用されます。 –