質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

解決済

1回答

790閲覧

FORTRANで連続した文字列を桁数指定して読み込み、書き込みしたい。

coretab

総合スコア14

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2018/02/10 07:01

数字の列に簡単な計算を加え、新しいファイルに出力するプログラムを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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

readの時は*で読んで、writeのとき(i4,5(x,i2.2)で書けばいいかと。

投稿2018/02/10 07:31

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coretab

2018/02/10 08:27

ありがとうございます! 無事にプログラムが回りました!
otn

2018/02/10 08:32

あ、閉じ括弧が1つ足りませんでした。
coretab

2018/02/11 03:43

ありがとうございます!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問