gemme data i binære filer

Tags:    c++

Hej udviklere,
jeg sidder og arbejder med nogle store dataset, og har lavet en del programmer til at håndtere dem. Til at gemme data fra session til session plejer jeg at skrive .txt-filer med komma-separerede data, og så læse dem ind når jeg starter. Problemet er at denne metode tager lang tid, og jeg kan konstatere at andre programmer ikke bruger lang tid på at læse tekstfiler ind.
Mit spørgsmål er: Hvilken metode kan jeg bruge til at gemme interne dataset til brug i mit eget program på en effektiv måde?
Umiddelbart tænker jeg at jeg skulle gemme det som binære filer. Ville man gøre det sådan her?
Fold kodeboks ind/udKode 

Spørgsmål 2: Hvordan bør jeg struktere en sådan fil hvis jeg vil gemme og læse data så effektivt som muligt?
Mine nuverænde datafiler ser traditionelt således ud:
Fold kodeboks ind/udKode 

På forhånd tak ;-)



Indlæg senest redigeret d. 03.10.2008 11:41 af Bruger #8249
4 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Strukturen er ca. den samme, uanset om filen er binær eller i tekst format. Du behøver ikke komma i binære filer, da de normale felter har en kendt størrelse.

Det største problem er sådan set strenge, da de kan have variabel længde. Du kan vælge at afsætte et fast antal bytes til strengen, og fylde med '\0', det er det hurtigste. Ellers kan du have variabel længde og afslutte med '\0', det fylder mindre men tager lidt længere tid. Du kan også vælge at gemme en længde på strengen, det er måske et rimeligt kompromis.
Men hvis der kun er nogle få millioner linjer og der ikke er ret mange strenge, ville jeg nok vælge at afsætte en fast længde til disse.



Jeg kan se at spørgsmålet går på filer, men må jeg spørge dig hvorfor du ikke vælger en database som fx http://sqlite.org/? Den er lille og meget god til sådanne opgaver hvor man skal gemme interne data tilhørende selve programmet.



Bertel << Tak, det prøver jeg, det ser jo ikke så svært ud :-)
Martin << Det må nok tilskrives uvidenhed ;-) Det var ikke falldet mig ind at der fandtes en alternativ metode, da min erfaring med databaser begrænser sig til lidt leg med MySQL. Jeg har downloadet det og vil tjekke det ud.
Under alle omstændigheder er det fedt at kende til - men er det rigtig forstået at det primært er smart hvis man vil bruge den samme database hver gang man åbner programmet (dvs. til at gemme interne data, som du skriver, a la settings)? Det jeg er ude efter er nok at lave et 'proprietary file format' - jeg skifter mellem forskellige datasæt, men bruger kun 3-4 af dem regelmæssigt, og det er dem jeg gerne vil gemme i et programspecifikt format, så de er nemme at læse ind.



Indlæg senest redigeret d. 04.10.2008 09:01 af Bruger #8249
Hej, jeg googlede lige 'proprietary file format', som var et smart ord jeg havde set på nettet. Det er selvfølgelig noget vrøvl, jeg ville bare prøve at lave min egen filtype...
Det ser ud som om sqlite er en god løsning, selvom det muligvis vil betyde at jeg skal omtænke store dele af mit program for virkelig at udnytte det.
Så tak for hjælpen!



Indlæg senest redigeret d. 06.10.2008 09:40 af Bruger #8249
t