Avatar billede conrad Nybegynder
28. oktober 2003 - 16:27 Der er 14 kommentarer og
1 løsning

skrive/læse klasser fra fil (c++ ikke c)

Jeg har brug for at kunne læse noget data fra en fil og skabe nogle objekter herfra. At skrive er jo forholdsvis let men at læse ...

Nå men jeg overvejer at lave en slags TLV indkoding, men vil lige høre om der er nogle bedre forslag (måske mere
standard løsninger)

De objekter jeg skal læse har følgende attributter

double val;
list<double>;
int id;

altså, de er rimelig simple
Avatar billede arne_v Ekspert
28. oktober 2003 - 16:56 #1
Du har med andre ord brug for serialisering og deserialisering !
Avatar billede arne_v Ekspert
28. oktober 2003 - 17:00 #2
Du bliver nødt til at håndkode noget.

skriv 8 byte med val
skriv 4 byte med id
skriv 4 byte med antal i liste
skriv N*8 bytes med indhold af liste

og omvendt med læsning.
Avatar billede arne_v Ekspert
28. oktober 2003 - 17:00 #3
Jeg ville bruge C fwrite og fread til at læse og skrive med.
Avatar billede arne_v Ekspert
28. oktober 2003 - 17:04 #4
Men man kan også åbne C++ og fstream med ios::binary - jeg har bare
aldrig set nogen grund til det.
Avatar billede bertelbrander Novice
28. oktober 2003 - 23:27 #5
Jeg ville måske vælge at bruge sizeof(int) og sizeof(double) i stedet for 4 og 8.
Avatar billede arne_v Ekspert
29. oktober 2003 - 06:08 #6
Selvfølgelig.
Avatar billede conrad Nybegynder
29. oktober 2003 - 09:59 #7
Jeg har lidt problemer med 1. argument til fwrite som skal være const void*

eks:
int i;
i = 20;

fwrite(i, sizeof(i), 1, outfile); virker ikke. Hvad skal jeg gøre for at få int -> const void* (printf?)

og kan jeg bruge sizeof(i) eller skal det være sizeof(int)?
Avatar billede arne_v Ekspert
29. oktober 2003 - 11:06 #8
&i
Avatar billede arne_v Ekspert
29. oktober 2003 - 11:07 #9
Hvis i er int så returnerer sizeof(i) og sizeof(int) det samme.

Jeg ville bruge sizeof(int) fordi så ændres det automatisk hvis
du ændrer typen af i.
Avatar billede conrad Nybegynder
29. oktober 2003 - 13:06 #10
Jeg skriver første gang til filen således                                                                int nroftrustdata = tvalues.size();//nr of stored int trustvalues
fwrite(&nroftrustdata,sizeof(int),1,fdata);
jeg kan se at nroftrustdata ikke er 0.

men når jeg læser :
char buf[255];
fread(buf,sizeof(int),1,fdata);
int nroftrustdata = atoi(buf);       
så er nroftrustdata = 0 ?? Hvad gør jeg galt?
Avatar billede arne_v Ekspert
29. oktober 2003 - 13:13 #11
fwrite skriver binært, fread læser binært

atoi forventer tekst

prøv med:

int nroftrustdata;
fread(&nroftrustdata,sizeof(int),1,fdata);
Avatar billede conrad Nybegynder
29. oktober 2003 - 13:28 #12
tusind tak arne! Så virker det - så læg et svar så vi kan komme videre :)
Avatar billede arne_v Ekspert
29. oktober 2003 - 13:33 #13
ok
Avatar billede bertelbrander Novice
29. oktober 2003 - 19:19 #14
>arne_v, du skrev:

Jeg ville bruge sizeof(int) fordi så ændres det automatisk hvis
du ændrer typen af i.

Jeg tror du mener:

Jeg ville bruge sizeof(i) fordi så ændres det automatisk hvis
du ændrer typen af i.
Avatar billede arne_v Ekspert
29. oktober 2003 - 19:22 #15
Ja selvfølgelig - det jeg skrev er da noget sludder.
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