15. A bemenet és kimenet II. (más esetben)

Bármilyen programnyelvnél fontos a bemenet és kimenet (I/O)kezelése. Eddig példáinkban a két legelterjedtebb konstrukciót láttuk a read és write utasításokat. Fortranban az I/O használata elég gyakran elbonyolódik, a jegyzetünkben ezért csak az egyszerübb esteket vizsgáljuk meg.

A read és a write

A Read parancsot a bemenetre, míg a write utasítást a kimenetre használjuk. A formalizmus az alábbi:
      read (egyedi szám, formázási szám) változók listája
      write(egyedi szám, formázási szám) változók listája
Az egyedi szám utalhat a standard, alapértelmezett I/O-ra vagy vmilyen fájlra. A formázási számról késõbb lesz szó (a format parancs cimkéjére utaló szám).

Lehetséges ezen utasítások leirását egyszerûsítéshetjük a csillag (*) jelöléssel is, mint ahogy tettük is az eddigi példáinkban is. Ezt néha általános beolvasásnak és kiiratásnak is szokták nevezni.

      read (*,*) változók listája
      write(*,*) változók listája
Az elsõ parancs az alapértelmezett bemeneten a változók összes értékeit olvassa be, míg a második az alapértelmezett kimeneten keresztül írja ki az értékeket.

Példák

Nézzük az alábbi Fortran programszegmenst (részletet):
      integer m, n
      real x, y, z(10)

      read(*,*) m, n 
      read(*,*) x, y
      read(*,*) z
Itt a bemenet a standard (például egy adatfájlon keresztül az alapértelmezett bemenetre vonatkoztatva). Ez az adatfájl rekordokból (sorokból) áll, ahogy ezt a Fortran terminológiában megszoktuk. Példánkban minden rekord tartalmaz egy számot (lehet egész vagy valós). Az egyes rekordokat üres helyekkel vagy vesszõkkel választjuk el. Konkrét esetben a fenti bemeneti file így néz ki:
   -1  100
  -1.0 1e+2
  1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
Vagy vesszõkkel ugyanez:
   -1, 100
 -1.0, 1e+2
  1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0
Fontos tudni, hogy a Fortran 77 bemenete érzékeny a sorok helyére, ezért fontos, hogy ne tegyünk bele extra oszlopokat (mezõket) és sorokat (rekordokat). Azaz, ha így módosítjuk a felállást, azaz kiveszünk egy sort:
   -1, 100, -1.0, 1e+2
  1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0
akkor m és n értékét -1-nek és 100-nak fogja venni, és a sor utolsó két elemét (-1.0, 1e+2 ) elhagyja, x és y értékének az 1.0 és 2.0 -t veszi, a második sor többi tagját figyelmen kivül hagyja. A z elemeit pedig definiálatlannak veszi.

Ha pedig egy adott sorban túl kevés a bemeneti adat, akkor a következõ sorbeliekkel egészíti ki, tehát a

   -1
  100
 -1.0
 1e+2
  1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0
kombináció eredménye ugyanaz lesz, mint az elsõ két (jó) eset volt.

További változatok

További általános I/O is rendelkezésünkre áll:
      read  *, változók listája
      print *, változók listája
aminek jelentése pontosan ugyanaz, mint a feljebb leírt "csillagos", azaz általános read és write utasításoknak. Ez a verzió mindig az standard bemenet és kimenetet használja, ezért a * itt a formára utal.

 

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]