Avatar billede cybermouse Nybegynder
20. september 2003 - 16:48 Der er 10 kommentarer og
1 løsning

erstatte karekterer i en fil, hvordan?

jeg har en genvej som jeg skal have ændret nogle karekterer i, nemligt et brugernavn i filen står de som
b r u g e r n a v n
altså er hvert andet karekter blankt, og hver andet en del er brugernavnet, jeg har forsøgt at lave det med en variabel som er en char, hvilken der hedder brugernavn

*kode eks.
  FILE* genvej;
    genvej = fopen("c:\\skema.lnk", "w");
    fputc (brugernavn[0], genvej);

    fclose(genvej);
*slut kode eks.

problemet er bare at den erstatter hele filen med den ene karekter jeg har valgt, i brugernavn[0], jeg mangler desuden en metode at definere hvor karekteren skal placeres i filen, altså et offset i enten bytes eller Hex, disse tal er konstanter.
håber min formulering er til at forstå
giver en del point da jeg gerne vil hurtigt videre og derfor håber på hurtigt svar.
Avatar billede arne_v Ekspert
20. september 2003 - 17:08 #1
#include <stdio.h>

int main()
{
  FILE *fp;
  int n;
  char buf[3];
  fp=fopen("test.dat", "r+b");
  fseek(fp,7,SEEK_SET);
  n=fread(buf,1,sizeof(buf),fp);
  memcpy(buf,"123",3);
  fseek(fp,7,SEEK_SET);
  fwrite(buf,1,n,fp);
  fclose(fp);
  return 0;
}

sætter byte 8-10 til "123".

Du kan sikkert rette det til til dit formål.
Avatar billede arne_v Ekspert
20. september 2003 - 17:11 #2
Det kan vist gøres lidt pænere (ingen grund til at læse ind først i
dette tilfælde):

#include <stdio.h>

int main()
{
  FILE *fp;
  char val[] = "123";
  fp=fopen("test.dat", "r+b");
  fseek(fp,7,SEEK_SET);
  fwrite(val,1,strlen(val),fp);
  fclose(fp);
  return 0;
}
Avatar billede arne_v Ekspert
20. september 2003 - 17:12 #3
Men stadigvæk: skip første 7 bytes og skriv 3 bytes i eksisterende fil.
Avatar billede cybermouse Nybegynder
20. september 2003 - 23:42 #4
Tak, for hjælpen det ser godt ud, men jeg kunne vel ikke lokke dig til at hjælpe lidt mere?
jeg har prøvet på at erstatte den, med mine egne ting og har oprettet en funktion for det, men jeg får en compile fejl, måske du kan se hvad der er galt
#include <stdio.h>
#include <iostream.h>
 
char brugernavn[7];

void skema(void)
{
  FILE *fp;
  fp=fopen("c:\\skema.lnk", "r+b");
  fseek(fp,654,SEEK_SET);
  fwrite(brugernavn[0],1,strlen(brugernavn),fp);
  fclose(fp);
  }
fejlen som jeg får ud er strlen : undeclared identifier
og som compiler bruger jeg microsoft visual C++ 6.0

min kode komplet:
#include <stdio.h>
#include <iostream.h>
 
char brugernavn[7];

void server(void)
{
      FILE* Fil;
  Fil = fopen("server.cfg", "a");
  fputs(brugernavn, Fil);
  fclose(Fil);
  }

void skema(void)
{
  FILE *fp;
  fp=fopen("c:\\skema.lnk", "r+b");
  fseek(fp,654,SEEK_SET);
  fwrite(brugernavn[0],1,strlen(brugernavn),fp);
  fclose(fp);
  }


main()
{
    cout << endl;
    cout << "Indtast Brugernavn paa skolen, dog uden UVDM foran eks. morlau9" << endl;
    cin >> brugernavn;
server();
skema();
  cout << "brugernavnet blev skrevet til konfigurations filen" << endl;

  return 0;
}
#slut kode komplet
Avatar billede arne_v Ekspert
20. september 2003 - 23:44 #5
Du skal bare have en:

#include <string.h>
Avatar billede arne_v Ekspert
20. september 2003 - 23:45 #6
[den compiler jeg bruger inkluderer tilsyneladende den i stdio.h]
Avatar billede cybermouse Nybegynder
21. september 2003 - 00:01 #7
hjalp mig videre, men det viser sig så at der nu kommer endnu en fejl nu da den har fundet ud af det :-(
c:\documents and settings\aterra\desktop\brugernavn\main.cpp(19) : error C2664: 'fwrite' : cannot convert parameter 1 from 'char' to 'const void *'
Avatar billede cybermouse Nybegynder
21. september 2003 - 00:05 #8
det er selvfølgeligt i denne linie den hentyder til at der er en fejl
  fwrite(brugernavn[0],1,strlen(brugernavn),fp);
error C2664: 'fwrite' : cannot convert parameter 1 from 'char' to 'const void *'

P.s. håber du gider hjælpe mere, men behøver selvfølgeligt ikke da du allerede har besvaret mit spg. så rigeligt
thx
Avatar billede arne_v Ekspert
21. september 2003 - 00:21 #9
Muligvis mener du:

fwrite(brugernavn,1,strlen(brugernavn),fp);

brugernavn[0] er kun en enekelt char ikke en streng.
Avatar billede arne_v Ekspert
21. september 2003 - 00:21 #10
Hvis du mener 1 char er det:

fwrite(&brugernavn[0],1,1,fp);
Avatar billede cybermouse Nybegynder
21. september 2003 - 08:00 #11
det var lige præcist hvad jeg mente og det virker kanont, mange tak for hjælpen.
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