数字の列に簡単な計算を加え、新しいファイルに出力するプログラムをFORTRANにて作成しようとしています。
プログラムを以下の通りですが、問題が生じている部分は、”change time”以下にある太文字にした部分です。
このプログラムでは、
2014 12 25 00
2014 01 25 12
↑(test.txtの内容)
のような日付、時刻についての4列の文字列を読み込み、
時刻と追加したい事項を加えて、
2014 12 25 00 00 18
2014 12 25 03 00 18
2014 12 25 06 00 18
2014 12 25 09 00 18
2014 01 25 12 00 18
2014 01 25 15 00 18
2014 01 25 18 00 18
2014 01 25 21 00 18
↑(change_test.txtとして出力したい内容)
のような文字列に変換することを目的としています。
"0"や"3"のような一桁になる数字の列を"00"や"03"のまま、
二桁の状態で出力する必要があります。
デフォルトの編集記述子であるアスタリスクを使用した場合、
2014 12 25 0 0 18
2014 12 25 3 0 18
2014 12 25 6 0 18
2014 12 25 9 0 18
2014 1 25 12 0 18
2014 1 25 15 0 18
2014 1 25 18 0 18
2014 1 25 21 0 18
のようになってしまいます。
編集記述子を以下のプログラムに記載してある通り
I2.2にして見ましたが、年の部分に問題が生じてしまうのと、
空白と列の区別をつけることができないのか、
Fortran runtime error: End of file
というエラーが出てしまいます。
何か良い案があれば教えて頂けると幸いです。
----以下プログラム--------------------------------------------------------------------
program time_change
implicit none
integer :: i,c,r,EXA,counter
integer,dimension (200) :: YEAR, MONTH, DAY, TIME, jikan, MI
open (11, file='test.txt',status='old')
open (22, file='change_test.txt',status='unknown')
EXA = 18
!---------------count lines of enter file-------------------------------
counter = 0
do
read(11,*,end=999) counter = counter + 1
end do
999 continue
print *,'Number of lines is',counter
rewind(11)
!--------------chenge TIME----------------------------------------------
do i=1,counter
**read(11,'(I2.2)') YEAR(i),MONTH(i),DAY(i),TIME(i)**
end do
do i=1,counter
if ( TIME(i) == 00 ) then do c = 0,3 jikan(c) = 00 + ( 3 * c ) MI(c) = 00 write(22,*) YEAR(i),MONTH(i),DAY(i),jikan(c),MI(c),EXA end do else do r = 0,3 jikan(r) = 12 + ( r * 3 ) MI(r) = 00 write(22,*) YEAR(i),MONTH(i),DAY(i),jikan(r),MI(r),EXA end do end if
end do
close(11)
end program
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/10 08:27
2018/02/10 08:32
2018/02/11 03:43