Avatar billede ladyhawke Novice
20. august 2002 - 10:56 Der er 11 kommentarer og
2 løsninger

Overskriv linie i tekstfil (visual C++ 6.0)

Jeg har en tekstlinie som skal indsættes i en tekstfil, sådan at linien i den oprindelig fil overskrives. Jeg kender linie nummeret i tekstfilen, hvordan gør jeg det?
Avatar billede soepro Nybegynder
20. august 2002 - 12:52 #1
Med mindre du vil til at lave en masse fix-fakserier i den originale file, er det nemmeste nok:

#include <stdio.h>
#include <conio.h>

int main(void)
{
  FILE *inpFile;
  FILE *outpFile;
  int  lineCount;
  char  buffer[256];
  char *nyLinie = "Denne linie skal sættes ind på linie 10.";

  if ((inpFile = fopen("C:\\gl_fil.txt", "rt")) == NULL
  || ((outpFile = fopen("C:\\ny_fil.txt", "wt")) = NULL)
    return -1;

  lineCount = 0;
  while (fgets(buffer, sizeof(buffer)-1, inpFile) != NULL)
  {
    if (++lineCount == 10)
      fputs(outpFile, nyLinie);
    else
      fputs(outpFile, buffer);
  };

  fclose(outpFile);
  fclose(inpFile);
  return 0;
}

Eller noget i den stil.
Avatar billede ladyhawke Novice
20. august 2002 - 13:08 #2
hvad bruges inpFile til?
Avatar billede ladyhawke Novice
20. august 2002 - 13:14 #3
og hvorfor opstår denne fejl:
error C2664: 'fputs' : cannot convert parameter 1 from 'struct _iobuf *' to 'const char *'
Avatar billede soepro Nybegynder
20. august 2002 - 13:31 #4
Den oprindelige fil læses fra inpFile og "dumpes" over i ourpFile - med den ønskede linie udskiftet med den nye.

fputs(nyLinie, outpFile);
og
fputs(buffer, outpFile);

i stedet for.
Avatar billede ladyhawke Novice
20. august 2002 - 13:42 #5
Jeg er nødt til at overskrive den oprindelige fil (kildekode til et program), kan jeg ikke indlæse filen på en eller anden måde så jeg ikke får 2 filer ud af det i sidste ende...?
Avatar billede ladyhawke Novice
20. august 2002 - 14:18 #6
selvom jeg prøver ovenstående version får jeg en assertion fejl: stream != NULL ...
Avatar billede soepro Nybegynder
21. august 2002 - 11:59 #7
Du kan jo altid "dumpe" output filen i C:\TEMP, slette den gamle og flytte den nye derover.

Alternativt, skal du bare "hælde" outpFile tilbage i inpFile:

fopen(inpFile, "C:\\gl_fil.txt", "r+t"); // Både læse og skriv.
fopen(outpFile, "C:\\temp\\ny_fil.txt", "w+t"); // Både skriv og læs.
fseek(inpFile, 0, SEEK_SET);
fseek(outpFile, 0, SEEK_SET);
while (fgets(buffer, sizeof(buffer)-1, outpFile)
  fwrite(buffer, inpFile);
fclose(inpFile):
fclose(outpFile);
remove("C:\\temp\\ny_fil.txt");
Avatar billede ladyhawke Novice
21. august 2002 - 14:18 #8
hvad med assertion fejlen, ved du hvorfor jeg får den?
Avatar billede soepro Nybegynder
21. august 2002 - 15:10 #9
Hvad f..... betyder assertion fejl: stream != NULL - er det virkeligt alt hvad du får ???
Avatar billede ladyhawke Novice
22. august 2002 - 07:34 #10
Når jeg kører programmet (kompile går godt) får jeg:

Debug assertion failed!

Program: .... (stien til programmet)
file: fputs.c
line 48

Expression: stream!=NULL

For information blah blah
Avatar billede ladyhawke Novice
22. august 2002 - 11:18 #11
BTW fwrite kaldes med 4 parametre, hvordan får jeg fat i det to sidste? (size og count)
Avatar billede ladyhawke Novice
29. august 2002 - 07:54 #12
Jeg tror jeg lukker spørgsmålet, der er ikke kommet nogen respons i den sidste uge. Soepro får naturligvis nogle point for indsatsen...
Avatar billede soepro Nybegynder
29. august 2002 - 08:32 #13
fwrite(buffer, sizeof(buffer), 1 /* eet element af buffer's størrelse */, inpFile);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester