dポイントプレゼントキャンペーン実施中!

 Fortranを使っているものです。
プログラムで、ファイル名は文字列形式でしか付けれないと思いますが、そのファイル名をメインプログラムから何か値をもらって、それをサブルーチンでファイル名につけるということはできるのでしょうか?
 例えば、iをメインプログラムで10~100まで10ずつ動かすとします。そのiの値をわかりやすくするためにファイル名に付けたいと思っていて、do文でサブルーチン中でまわしてファイル名に入れる・・・なんてことは可能でしょうか?

A 回答 (3件)

#2の方の紹介している方法だと、100以下の時のファイル名が前0がないのでシステムによってはエラーになります、WRITE(STRING,*) だと、ソートしたときに命名順に並ばないので、ちょっと工夫しましょう。



CHARACTER*20 FNAME
CALL CRFNAM(FNAME,I)

SUBROUTINE CRFNAM(FNAME,I)
CHARACTER*20 FNAME
CHARACTER*4 CWORK

WRITE(CWORK,"(I4)") I+1000
FNAME="DATA"//CWORK(2:4)//".TXT"
OPEN(10,FNAME)

RETURN

こんな感じではどうでしょう
FNAMEの文字式が嫌なら

WRITE(FNAME,"(4HDATA,A3,4H.TXT)") CWORK(2:4)

でもok
    • good
    • 0
    • good
    • 0

たとえばこんな感じでしょうか?


-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
subroutine fname(i)
character fnam*6
character name(6)
character num(10)
num(1) = '0'
num(2) = '1'
num(3) = '2'
num(4) = '3'
num(5) = '4'
num(6) = '5'
num(7) = '6'
num(8) = '7'
num(9) = '8'
num(10) = '9'
name(1) = 'f'
name(2) = 'i'
name(3) = 'l'
name(4) = 'e'
name(5) = num(i/10+1)
name(6) = num(i-(i/10)*10+1)
   fnam=name(1)//name(2)//name(3)//name(4)//name(5)//name(6)
open(1,file=fnam)
write(1,*) fnam
close(1)
return
end

do i = 0, 99
call fname(i)
end do
end
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!