25. april 2004 - 14:11
Der er
16 kommentarer og 1 løsning
overskrive sidste linje i en fil
Er der en måde man kan overskrive den sidste linje i en fil
Annonceindlæg fra Computerworld
25. april 2004 - 14:50
#1
Generelt (standard C eller C++, any platform): nej - ikke uden at genskrive hele filen. Ofte kan man lave noget fusk. Følgende vil erstatte den sidste linie med en ny linie på de mest gængse platforme forudsat at den nye linie er mindst lige så lang som den gamle: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #define N 5120 static char retbuf[1024]; void replace_last_line(char *fnm, char *line) { FILE *fp; struct stat st; char tmpbuf[N]; int ix,len,bufix; stat(fnm, &st); len=st.st_size<N?st.st_size:N; ix=st.st_size-len; fp=fopen(fnm,"r+b"); fseek(fp,ix,SEEK_SET); fread(tmpbuf,len,1,fp); bufix=len-1; while((tmpbuf[bufix]!='\n')&&(bufix>0)) bufix--; ix=st.st_size-len+bufix+1; fseek(fp,ix,SEEK_SET); fwrite(line,strlen(line),1,fp); fclose(fp); return; } int main(int argc,char *argv[]) { replace_last_line("z.txt", "ABC"); exit(0); }
25. april 2004 - 20:48
#2
hvilke argumenter skal replace last line have. Jeg skrive følgende ind i filen. fprintf(fp, "%s,%d,%d,%f,%f",kort,start,slut,pros,saldo);
25. april 2004 - 20:56
#3
Min funktion tager en komplet linie som argument. fclose(fp); char buf[200]; sprintf(buf, "%s,%d,%d,%f,%f\n",kort,start,slut,pros,saldo); replace_last_line("dinfil.dat", buf);
26. april 2004 - 13:38
#4
er det muligt at gøre fil navnet til en variabel
26. april 2004 - 13:51
#5
Selvfølgelig replace_last_line(fnm, buf); hvis fnm er et char arrat replace_last_line(fnm.c_str(), buf); hvis fnm er en string
26. april 2004 - 13:52
#6
OK at jeg ligger et svar ?
26. april 2004 - 13:55
#7
finder den selv stien eller skal den angives et andet sted
26. april 2004 - 14:03
#8
jeg kan ikke helt forstå det. Hvor fortæller jeg den hvor den skal lede skal sprintf ikke have flere argumenter så den ved hvor den skal lede
26. april 2004 - 14:06
#9
ok jeg har fundet ud af det tak for hjælpen. Den skriver lidt mange nuller ind i filen er det noget der kan ændres på eller er det standard
26. april 2004 - 14:21
#10
stien kan selvfølgelig skrive i filnavnet Det med for mange nulle rforstod jeg ikk e- hvis du forklarer nærmere så kan det sikkert fixes
26. april 2004 - 14:47
#11
det er de to floats jeg skriver ind i filen der kommer 6 nuller på efter altså der stod først 150 og det blev så overskrevet med 200.000000 altså der kommer nuller på når jeg overskriver linjen
26. april 2004 - 14:50
#12
Det styrer du i formatet: %f betyder "find selv antal cifre før og efter decimal punktum" %5.1f betyder "5 tegn og 1 tegn efter decimal punktum => 3 før"
26. april 2004 - 14:58
#13
ok
26. april 2004 - 17:01
#14
jeg har lige et ekstra spørgsmål. Jeg kan kun få det til at virker hvis der står mere end 1 linje i filen. Hvis der kun står en går det helt galt, ved du hvad det kan være der skyldes det
26. april 2004 - 17:21
#15
Jeg har ikke kodet det godt nok ! Jeg kan prøve at kigge på det igen.
26. april 2004 - 19:33
#16
Prøv og erstat: ix=st.st_size-len+bufix+1; med: ix=st.st_size-len+bufix+(bufix>0?1:0);
26. april 2004 - 21:26
#17
ok tak for det det virker
Kurser inden for grundlæggende programmering