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 typuinteger
o velikosti w znaků (bez znaménka)Fw.d
- výpis typureal
o velikosti w znaků (bez znaménka) s d desetiných místEw.d
neboEw.dEe
-Lw
- výpis typulogical
o velikosti w znakůnX
- vynechá n znaḱů na vstupu nebo vypíše n mezerAw
- výpis typucharacter
o velikosti w znakůG
,Gw
,Gw.d
,Gw.dEe
- vybere vhodnější zF, E, I, L, A
Tc
- 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