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

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

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

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

解決済

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

coretab
coretab

総合スコア0

FORTRAN

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

1回答

0評価

0クリップ

33閲覧

投稿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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

FORTRAN

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