我試圖編輯文本文件中的一行,但在編輯文件時出現意外的行爲。我想要做的是調整看起來像一個文本的特定線(點:100)。在函數中,我通過值傳遞參數來調整新的硬幣,並用ftell-> user_point將文件偏移。我得到的輸出是奇怪的。我嘗試將文件的其餘部分複製到臨時文件中,並將其複製到一行,然後將它複製回原始文件,並將其複製到臨時文件中(即用戶點的偏移量爲ftell)。 原來這裏是外商投資企業有這樣的條目:使用臨時文件在文本文件中編輯行C
...
_______________________________________
nickname : geo
password : cuvctq
Name : george
Surname : papas
points : 100
participated :
past draws : 0
Chosen No. :
future draws : 0
Registered : Sun Feb 05 19:23:50 2012
...
第二次編輯運行後我得到的是:
...
_______________________________________
nickname : geo
password : cuvctq
Name : george
Surname : papaspoints : 98
participated :
past draws : 0
Chosen No. :
future draws : 0
Registered : Sun Feb 05 19:23:50 2012
...
At the end of the text i get one extra \n after i edit the
file whch is something i dont want :/
等進一步的編輯將破壞文字... 我也得到一個在該行的末尾EXTRA \ n的,至少我是這麼認爲的東西,是由於"r+"
模式是什麼,我也不想......
void coins_adjust(int coins_new,int user_point)
{
int lines,i,ln_point_copy;
char buffer[50],buff_copied[50];
FILE *lottary,*temp;
memset(buff_copied,'\0',sizeof(char)*50);
lottary=fopen("customers.txt","r");
temp=fopen("temp.txt","w");
fseek(lottary,user_point,SEEK_SET);
for (lines=0;lines<5;lines++)
{
memset(buffer,'\0',sizeof(char)*50);
if (lines==5)
ln_point_copy=ftell(lottary); //from TEMP to CUSTOMERS
fgets (buffer ,50 , lottary);
}
coins_new+=atoi(buffer+15);
strncpy(buff_copied,buffer,15); //copy 15 chars and fill with null
memset(buffer,'\0',sizeof(char)*50);
itoa (coins_new,buffer,10); //fix the new line to be entered
strcat(buff_copied,buffer); //the edited line is as it is supposed
strcat(buff_copied,"\n"); //to be with \n at the end.
puts(buff_copied);
printf("%s",buff_copied);fflush(stdout);
fprintf(temp,"%s",buff_copied);
for(i=getc(lottary); i!=EOF; i=getc(lottary)) //copy to temp
{
putc(i, temp);
}
fclose(lottary);
fclose(temp);
temp=fopen("temp.txt","r");
lottary=fopen("customers.txt","r+");
fseek(lottary,ln_point_copy,SEEK_SET);
for(i=getc(temp); i!=EOF; i=getc(temp)) //copy until eof
{
putc(i, lottary);
}
fclose(lottary);fclose(temp);
}
我調試了程序,一切似乎工作至少在什麼值傳遞給我存儲線字符的數組,但我不明白爲什麼它忽略了前一行的\n
,當我嘗試將它複製回原始...似乎有一個\r
字符,我無法擺脫,而我複製回原來的... 在此先感謝。
爲什麼不一次一行地閱讀,如果它包含你想改變的東西然後改變它,並且把這一行寫出到新文件中。然後,要更改的行的實際位置可以在任何位置,並且如果文件的格式發生更改,則不必擔心程序。 – 2012-02-06 10:44:51
@JoachimPileborg其實這就是我所做的或多或少的,但這些條目可以是數百等。所以我需要編輯線,並將其放置在它的位置。 – BugShotGG 2012-02-06 11:01:30