Přeskočit na obsah

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 typu integer o velikosti w znaků (bez znaménka)
  • Fw.d - výpis typu real o velikosti w znaků (bez znaménka) s d desetiných míst
  • Ew.d nebo Ew.dEe -
  • Lw - výpis typu logical o velikosti w znaků
  • nX - vynechá n znaḱů na vstupu nebo vypíše n mezer
  • Aw - výpis typu character o velikosti w znaků
  • G, Gw, Gw.d, Gw.dEe - vybere vhodnější z F, E, I, L, A
  • Tc - skok na c-tý znak řádku
  • TLc - skok o c znaků doleva
  • TRc - skok o c znaků doprava
  • g0 - 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