next up previous contents index
Next: Diverse Up: Input- og output filer Previous: Åbne og lukke filer   Contents   Index


Læse og skrive i filer

De to funktioner fwrite og fread anvendes til henholdvis at skrive og læse binært fra filer. Skrivefunktionen opskrives efter formen:
      c = fwrite(fid, A,'præcision')
Ved denne kommando vil A matricens elementer blive skrevet ud på filen med identifikator fid, med den nøjagtighed af tallene som angives i citationstegn istedet for ordet præcision. Det vil sige om der f.eks er tale om heltal eller reelle tal og om der er anvendes 8, 16, 32 eller 64 bit til at repræsentere tallet.

fwrite returnere en værdi svarende til antallet af elementer, der med succes er blevet skrevet ud på filen. Her er variablen c sat til at opbevare denne værdi.

Der er en del forskellige måder, hvorpå en computer kan repræsentere tal. Præciseringen af hvordan de binære tal skal repræsenteres er således vigtig for den computer, hvor MATLAB er installeret. Her følger en liste over forskellige angivelser af præcision og hvad de står for. Disse angivelser skrives i stedet for præcision i kommandoen. I MATLABs egen manual (``Reference Guide'') under fread ses en udvidet liste af præcisionsangivleser. Nøjagtighed af tallene har også afgørende betydning for læse-funktionen.

Læse-funktionen fread kan anvendes på to måder, der kan skrives som[*]

      A = fread(fid);
      [A, c] = fread(fid, size, 'præcision');
I den simple udgave forsøger fread at læse elementer fra filen med identifikator fid til en matrix A. Der er ikke sat en præcision for hvordan tallene er repræsenteret på filen, men default-præcisionen er uchar, det vil sige tegn uden fortegnsangivelser.

I den udvidede udgave, læses der stadigvæk fra filen med identifikator fid, men her præciseres det yderligere at der skal læses elementer ind i en matrix af størrelse size. Der er tre mulige size former:

Når size ikke specielt er angivet er defaultværdien inf. I den udvidede udgave præciseres yderligere på hvilken form tallene er repræsenteret på filen. fread returnere udover en matrix, en værdi der svarer til antallet af elementer, der med succes er læst ind. Denne værdi tildeles variablen c.

For begge funktioner fread og fwrite returneres således en kontrolværdi, der er et udtryk for, hvor godt transmissionen til og fra filen gik. Svarer antallet af læste elementer ikke med det man regnede med at læse ind, kan der være problemer. Måske er filen ikke så lang som man troede, muligvis er der fejl i filen så MATLAB ikke kan læse alle elementerne. Måske er tallene repræsenteret på en anden måde (i det tilfælde kan problemet løses ved at andre præcisionen og så forsøge at læse ind igen). Er der fejl i filen er det nødvendigt at gå tilbage til konstruktionen af filen og løse problemet ad den vej.


Eksempel

I det forrige eksempel blev filen minfil.dat åbnet med rettigheder til at skrive og læse fra filen. I dette eksempel ønskes at lægge en matrix B ud på filen, hvorefter dele af denne matrix vil blive læst ind igen. Dette er en øvelse og giver ikke i sig selv mening (at læse en matrix ud for derefter at læse den ind igen). B matricen skaffes ved hjælp af magic funktionen, der genererer tilfældige heltal til matricer. B sættes til en 7 $ \times$ 7 matrix ved at skrive: B = magic(7)

For at holde øje med transmission tildeles variablen c kontrolværdien af fwrite-funktionen. B's elementer skal lagres som heltal repræsenteret ved 16 bit. På kommandolinien skrives nu:

      c = fwrite(fid, B, 'short')
Her skrive MATLAB matricen B ud på filen og returnerer værdien c = 49. Ialt 49 elementer er læst ud på minfil.dat. Fordi filen er åbnet med rettigheder 'r+' til både at skrive og læse, kan man allerede nu læse ind igen fra filen. Ellers ville det være nødvendigt at lukke filen og åbne den igen med rettighederne sat til at læse. Der skrives nu:
       [A, c] = fread(fid,9,'short')
I matricen A indlæses nu en søjlematrix på 9 elementer. Det forklares at formatet for filen er 'short'. Værdierne for variablene A og c bliver nu:
      A = 
          30
          38
          46
           5
          13
          21
          22
          39
          47
      
      c =
          9
Herefter skal filen minfil.dat lukkes som beskrevet i det forrige eksempel.

$ \Box$


next up previous contents index
Next: Diverse Up: Input- og output filer Previous: Åbne og lukke filer   Contents   Index
Bo Jakobsen 2000-08-15