Tu bom prikazal standardne posebnosti v Fortranu, ki jih boste s pridom uporabili pri programiranju. Priporoca se tipkanje programa z malimi crkami, saj je tako kodiran program bolj citljiv.
Ce zelimo interpretirati (parsing) vhodne podatke, ki imajo (na)kljucne besede skupaj s stevilcnim parametrom je potrebno najprej prebrati celotno vrstico kot niz znakov in ga nato interpretirati glede na vrsto kljucne besede. Naslednji primer programa prebere vhodno datoteko in izpise ustrezne podatke, ki jih je interpretiral.
program Prep Demo character*80 line real node(100,3) integer nodes, i, j, k open(1, 'primer2.sim', status='old') 10 read(1,'(A)', err=200) line if(line(1:5) .eq. 'nodes') then read(line(6:80), '(I5)') nodes print *, 'Nodes = ', nodes do 20, i=1, nodes read(1,*) j, (node(j,k), k=1,3) 20 print *, i, j, (node(j,k), k=1,3) endif if(line(1:5) .eq. 'solve') stop 'OK' goto 10 200 stop 'Pricakoval ukaz solve' end
Navedeni primer vsebuje formatne stavke vkljucene kar v ukaz read, kar je ugodno, ce imamo male formatne stavke. Podobno bi lahko napisali formatni stavek za ukaz read/write:
character ime*65 write(*, '('' Ime vhodne datoteke: '',$)') read(*,'(A)') imeDatoteke delimo na tekstne in binarne datokeke. Direktna datoteka je poseben primer binarne datoteke, ki ima fiksno dolzino zapisa (record). Fortran omogoca branje/pisanje v prostem formatu (*), uporabniskem formatu (format()) in brez formata (samo v binarne datoteke). Neformatirano direktno datoteko z dolzino enega zapisa 58 bytov se odpre z ukazom
open(1, 'results.bin', status='NEW', * access='DIRECT', form='UNFORMATTED', * recl=58)
Dolzina enega zapisa RECL se doloca z maksimalno velikostjo zapisa v datoteki. Zapisi imajo lahko razlicne vsebine podatkov, dolzina zapisa pa je fiksna zaradi hitrejsega dolocanja pozicije datotecnega kazalca. Doloci se jo s sestevkom dolzine vseh spremenljivk in upostevanjem, da zavzame realna spremenljivka 4 byte, celostevilcna 2, znakovna pa toliko, kolikor znakov ima rezerviranih.
Za branje in pisanje enote se uporablja standardni read/write stavek brez podatka o formatu.
write(1, rec=2) (x(i), i = 1, n/2) read(1, rec=2) (x(i), i = 1, n/2)
Pri vseh branjih in pisanjih se lahko testira napaka ob konverziji ali napaka na vhodno/izhodno enoti s parametrom err. Primer:
... read(line(6:80), '(I6)', err=102) nodes ... return 102 stop 'Napaka pri branju parametra nodes!' end
Fortran omogoca pisanje in branje v svoje interne enote v obliki character polja. To nam omogoca pretvarjanje numericnih spremenljivk v znakovne. Najveckrat se to uporablja za podprograme, ki zahtevajo kot parameter znakovno spremenljivko, na voljo pa imamo le numericno spremenljivko. Tipicen primer uporabe je izpis teksta v jeziku GKS. Primer:
character cnode*3 integer node ... write(cnode, '(I3)') node call gtx(x, y, cnode) ... end