Formátování vstupu a výstupu
Pokud používáme příkazy read(*,*) a write(*,*) v základní podobě zapisují se a čtou data v nějakém základním formátu. Někdy se nám ovšem hodí číst nebo zapisovat specificky formátovaný text.
Jedním ze způsobů jak specifikovat formát je zapsat jej místo druhé * v příkazech read(*,*) a write(*,*).
Druhou možností je definovat si formát pomocí příkazu format() a pak se na něj odkazovat pomocí volitelného parameteru fmt= (lze vynechat).
Seznam některých formátů:
Iw- výpis typuintegero velikosti w znaků (bez znaménka)Fw.d- výpis typurealo velikosti w znaků (bez znaménka) s d desetiných místEw.dneboEw.dEe-Lw- výpis typulogicalo velikosti w znakůnX- vynechá n znaḱů na vstupu nebo vypíše n mezerAw- výpis typucharactero velikosti w znakůG,Gw,Gw.d,Gw.dEe- vybere vhodnější zF, E, I, L, ATc- skok na c-tý znak řádkuTLc- skok o c znaků dolevaTRc- skok o c znaků dopravag0- vypíše libovolný datový typ v úsporném formátu*()- použije na všechny vstupy/výstupy stejný formát jako je v závorce
program priklad_34
implicit none
integer :: i = 1234567890
real :: r = 0.1234567890123456789
logical :: l = .true.
character(len=20) :: c = "Character len dvacet"
1 format(i15)
2 format(f15.5)
3 format(e15.5)
4 format(e15.5E1)
5 format(l15)
6 format(a15)
7 format(g15.5E1)
8 format('Vypis: ',g15.5E1)
write(*,*) i
write(*,*) r
write(*,*) l
write(*,*) c
write(*,*) "-----------------------"
write(*,1) i
write(*,2) r
write(*,3) r
write(*,4) r
write(*,5) l
write(*,6) c
write(*,7) i
write(*,7) r
write(*,7) l
write(*,7) c
write(*,*) "-----------------------"
write(*,'(i15)') i
write(*,'(f15.5)') r
write(*,'(e15.5)') r
write(*,'(e15.5E1)') r
write(*,'(l15)') l
write(*,'(a15)') c
write(*,*) "-----------------------"
write(*,'(a)') c
write(*,*) "-----------------------"
write(*,8) r
write(*,*) "-----------------------"
write(*,'(i10,2x,f15.5,2x,l1,2x,a)') i,r,l,c
write(*,*) "-----------------------"
write(*,'(*(g0))') i,r,l,c
write(*,*) "-----------------------"
write(*,'(*(g0,2x))') i,r,l,c
end program
Volba advance
Volbu můžeme použít, pokud chceme, aby další výpis byl na stejném řádku.
program priklad_35
implicit none
integer :: i = 1234567890
real :: r = 0.1234567890123456789
logical :: l = .true.
character(len=20) :: c = "Character len dvacet"
7 format(g15.5E1)
write(*,7,advance='no') i
write(*,7,advance='no') r
write(*,7,advance='no') l
write(*,7) c
write(*,*) "-----------------------"
write(*,'(*(g15.5E1,2x))') i,r,l,c
end program