Contents
入出力関係のTipsをまとめた自分用のサンプルプログラムです.
入出力関係のTipsをまとめた自分用のサンプルプログラムです.
Filename | Description |
---|---|
f90_for_basic.txt | Example program |
module defpi implicit none real(8),parameter::pi=3.14159265358979323846D0 end module defpi program f90_for_basic use defpi implicit none ..... ..... ..... end program f90_for_basic
call getarg(1,dummy) call getarg(2,fnameR) call getarg(3,fnameW)
実行用スクリプトの事例は以下のとおり.
./f90_for_basic 4 inp_dat.txt out_dat.txt
実行プログラム:f90_for_basic |
dummy=4 |
fnameR=inp_dat.txt |
fnameW=out_dat.txt |
文字変数 dummy に格納されている文字列を,数値変数 ndata に変換します.
read(dummy,*) ndata
io | 0 | 負値 | 正値 |
---|---|---|---|
意味 | 正常 | eof | エラー |
open(11,file=fnameR,status='old') read(11,'(a)') strcom do i=1,nn read(11,*,iostat=io) str(i) if(io<0)exit end do close(11) nd=i-1
subroutine rep_ub(s) character (*), intent (inout) :: s integer i do i = 1, len(s) if (s(i:i)=='_') s(i:i)=' ' end do end subroutine rep_ub
使用法は以下のとおり.str(i) に格納された文字列を,文字列変数 dummy にコピーし,サブルーチン rep_ub( ) を呼びます. 処理完了後,書き換えられた文字列変数 dummy を str(i) にコピーします.
do i=1,nd dummy=str(i) call rep_ub(dummy) str(i)=dummy end do
do i=1,nd write (filename,'("_test_",i2.2,".txt")') i open(13,file=filename,status='replace') ..... ..... close(13) end do
open(12,file=fnameW,status='replace') write(12,'(a)') trim(adjustl(strcom)) do i=1,nd linebuf='' do j=1,ndata write(dummy,'(",",e15.7)') datax(j) linebuf=trim(adjustl(linebuf))//dummy end do call del_spaces(linebuf) write(12,'(a)') trim(adjustl(str(i)))//trim(adjustl(linebuf)) end do close(12)
subroutine del_spaces(s) character (*), intent (inout) :: s character (len=len(s)) tmp integer i, j j = 1 do i = 1, len(s) if (s(i:i)==' ') cycle tmp(j:j) = s(i:i) j = j + 1 end do s = tmp(1:j-1) end subroutine del_spaces