FORTRAN を使用して ASCII テキスト ファイルからデータを読み込みます。ファイルには 1 行に複数のデータ値が含まれていますが、1 行の値の数は一定ではありません。
101.5 201.6 21.4 2145.5
45.6 21.2
478.5
...
通常、read ステートメントの後、Fortran は次の行に移動します。私ができるようにしたいのは、一度に 1 つのデータ値を読み取ることです。行末に達した場合は、次の行を読み続ける必要があります。これは可能ですか?
あなたの質問へのコメントで IRO-bot が指摘したように、答えは MSB によって既に与えられています。
program test
character(len=40) :: line
integer :: success, i, indx, prev, beginning
real :: value
open(1,file='test.txt')
do
read(1,'(A)',iostat=success) line
if (success.ne.0) exit
prev = 1
beginning = 1
do i=1,len(line)
! is the current character one out of the desired set? (if you
! have got negative numbers as well, don't forget to add a '-')
indx = index('0123456789.', line(i:i))
! store value when you have reached a blank (or any other
! non-real number character)
if (indx.eq.0 .and. prev.gt.0) then
read(line(beginning:i-1), *) value
print *, value
else if (indx.gt.0 .and. prev.eq.0) then
beginning = i
end if
prev = indx
end do
end do
close(1)
end program test
提供したサンプル行を使用してこのプログラムを実行すると、出力は次のようになります。
101.5000
201.6000
21.40000
2145.500
45.60000
21.20000
478.5000
これがお役に立てば幸いです。