14. A bemenet és kimenet I. (fájlokra)

Eddig is látthattuk a Fortranban be- és kimenet (azaz I/O = input/output) használata teljesen megegyezik a hétköznapival. Sõt, akár fájlokból is beolvashatunk vagy fájlokba is kiirathatunk, amelyeket valamilyen fizikai egységen tároljuk: merevlemezen, floppyn, cd-n, dvd-n. A Fortranban minden egyes fájlhoz egy egyedi szám tartozik, melynek értéke egy 1 és 99 közötti egész szám lehet. Néhány egyedi szám azonban már foglalt: az 5 a standard bemenet, a 6 a standard kimenetre utal.

Fáljok megnyitása és bezárása

Használat elõtt a fájlt meg kell nyitnunk az open paranccsal.
    open (különféle specifikációk listája)
ahol a leggyakoribb specifikációk az alábbiak:
    [UNIT=]  u
    IOSTAT=  ios
    ERR=     err
    FILE=    fname
    STATUS=  sta
    ACCESS=  acc
    FORM=    frm
    RECL=    rl
Az egyedi szám az u, ami egy 1-99 közötti egész szám. A program ezzel azonosítja fájlt. Fontos, hogy egy az egyes fájlok egyedi számai különfélék legyenek, épp ezért egyedi.

ios egy a be és kimenet (I/O) állapotát jelzi, ami egy egész szám. Ha az alkalmazás és visszatérés után az ios nulla, akkor sikeres, ha nem nulla, akkor sikertelen volt utasítás-végrehajtás.

err egy cimke, ahova akkor ugrik a program ha hibát talál..

fname a fáljnévre utal

sta a kezelendõ fálj korábbi állapotát jelzi, ami lehet NEW (=új, azaz a futtatáskor hozza létre), OLD (=régi, azaz már meglévõ fájl), és SCRATCH(= ideiglenes fálj, ami megnyitáskor vagy a program indításakor) keletkezik, de a bezárásnál (vagy a program lefutása után) azonnal törlõdik.

acc a fálj elérését jelenti, ami kétféle lehet vagy SEQUENTIAL (=szekvenciális, közvetett) vagy DIRECT (=direkt, közvetlen) Az alapértelmezett a SEQUENTIAL.

frm a fálj formátumát jelöli, ami lehet FORMATTED (=formázott) vagy UNFORMATTED (=formázatlan). Az alapértelmezett az UNFORMATTED.

rl jelöli egy direkt elérésû fálj rekordjainak a hosszúságát (a fálj méretére utal)

Miután megnyitottunk egy fájlt, utasításokat (kiiratást stb.) eszközölhetünk rajta. Miután ezekkel végeztünk a fáljt be kell zárnunk, ezt az alábbi módon kell megtennünk:

      close ([UNIT=]u[,IOSTAT=ios,ERR=err,STATUS=sta])
ahol a zárójelben lévõ paraméterek értelme és használata szinte teljesen megegyezik a feljebb tárgyaltakéval. Egy kis eltérés azért van, ez a sta: ami kétféle lehet ebben az esetben: vagy KEEP (=megtartani a fájlt, ez az alapértelmezett) vagy DELETE (=letörölni a fájlt)

A read és write utasítás

Az egyetlen eltérés a korábban definált read/write utasításokhoz képest, az egyedi szám egzakt megnevezése és specifikációja.
      read ([UNIT=]u, [FMT=]fmt, IOSTAT=ios, ERR=err, END=s)
      write([UNIT=]u, [FMT=]fmt, IOSTAT=ios, ERR=err, END=s)
ahol a legtöbb specifikációt már feljebb értelmeztük. az END=s egy utasítás cimkére utal, ahova a program ugrik, miután elérte a kezelt fájl végét.

Egy példa

Adva van egy points.dat nevû adatfájl, amiben néhány pont xyz koordinátája van felsorolva. A pontok számát e fálj elsõ sorában találjuk.Az egyes koordináták formátuma F10.4 (errõl és a FORMAT utasításról majd késõbb lesz szó) A következõ kis program beolvassa az adatokat egy x,y,z (3 dimenziós) tömbbe.
      program inpdat
c
c  Ez a program beolvassa n pont adatait egy 3 dimenzios x,y,z tombbe 
      integer nmax, u
      parameter (nmax=1000, u=20)
      real x(nmax), y(nmax), z(nmax)

c  Megnyitjuk az adatfile-t      
      open (u, FILE='points.dat', STATUS='OLD')

c  Beolvassuk a pontok szamat
      read(u,*) n
      if (n.GT.nmax) then
         write(*,*) 'Error: n = ', n, 'ha nagyobb mint nmax =', nmax
         goto 9999
      endif

c  Beolvasasi ciklus a ponthalmazra
      do 10 i= 1, n
         read(u,100) x(i), y(i), z(i)
   10 enddo
  100 format (3(F10.4))

c  Close the file
      close (u)

c  Most kovetkezik a beolvasott adathalmaz alkalmazasa
c  (hianyzo resz)
9999 stop
      end

 

Copyright © 1995-7 by Stanford University. All rights reserved.

Fordították: Seres András Tamás és Szalai Szilvia (ELTE-TTK)


[Tovább] [Tartalomjegyzék]