【Fortran90】ファイルの行数をカウントするプログラム
datファイルやcsvファイルなどの行数をカウントするプログラムを作りたくて色々調べてみたのですが、なにやらGOTO文を使っているのが多かったので、IF文を使ったプログラムを書いてみました。
program filereading
implicit none
integer :: countnumber, inputstatus
real(8) :: x, y
open (10, file='hogehoge.dat')
countnumber = 0
! 0 clear. countnumber corresponds to number of lines.
!======================================================================
do
read (10, *, iostat = inputstatus)
if (inputstatus < 0) exit
countnumber = countnumber + 1
end do
! Although it is infty loop, it can get out of this loop by follow IF symtax
! Have IO determine if there are elements in the file.
! When line empty, iostat is < 0.
! If it's empty, it commands to exit.
!======================================================================
write(*,*) 'count =', countnumber
close(10)
end program
countnumberというのがカウントする行数に対応しています。
肝となるのはREAD文のiostatです。このプログラムではinputstatusとしていますが、これは制御項目で、状況に応じた整数値を返してくれます。
このiostatについては調べてもらった方が手っ取り早く理解できるので詳細は割愛しますが、inputstatus < 0 となるのは読み込んだ内容が空だった場合です。このときに読み込みを終了してループを抜けなさいという命令をしています。
DOループを書く際は無限ループに気を付けないといけないわけですが、このようにIF文をうまく使うことで、懸念を払拭できます。
データ数をカウントできるので平均を取ったりするのに使えそうだなとか、そもそもデータ数を保管しておきたい時に便利なのではないかと勝手に思っています。
ご参考までに
サポートいただきありがとうございます!