循环遍历变量文件名以写入输出文件

时间:2015-11-13 11:36:26

标签: fortran output fortran77

我已经找到了想要在这里询问的答案:Looping over variable file names

但问题是,当我运行该程序时,它给了我一个奇怪的符号,就像一个微笑。

这是屏幕: enter image description here

代码是这样的:

  DIMENSION NWGRAIN(NWMAXGRAIN)
  CHARACTER*2  FLABEL

  NWMAXGRAIN=5

$c     GRAINS TO WRITE THE OUTPUT (NW STANDS FOR NUMBER WRITING)
   DO I=1,NWMAXGRAIN
        NWGRAIN(I)=0
   END DO
   NWGRAIN(1)=1
   NWGRAIN(2)=6
   NWGRAIN(3)=100
   NWGRAIN(4)=1000
   NWGRAIN(5)=1500


   DO I=1,NWMAXGRAIN
        IUNIT=901+I
        flabel=char(nwgrain(i))
        OPEN(IUNIT,FILE='DDRX_GRAIN'//FLABEL//'.OUT',
  #      STATUS='UNKNOWN')
   END DO

我想要几个文件,我必须写一个名为'DDRX_GRAIN1.OUT'的数据, 'DDRX_GRAIN6.OUT','DDRX_GRAIN100.OUT'等等。

但是你可以看到它给了我一个错误,其中数字被微笑取代......

不知道这是否是我的编译器的笑话:)

编辑:我很抱歉,但我不明白。 正如其他主题所述,我修改了我的代码:

       CHARACTER*2  FLABEL,x1
       character(len=8) fmt ! format descriptor (italo)

       fmt = '(I5.5)' ! an integer of width 5 with zeros at the left
       DO I=1,NWMAXGRAIN
              IUNIT=901+I
              i1=nwgrain(i)
               write (x1,fmt) i1 ! converting integer to string using a 'internal file'
              OPEN(IUNIT,FILE='DDRX_GRAIN'//trim(x1)//'.OUT',
 #      STATUS='UNKNOWN')
        END DO

新错误是:

forrtl:severe(66):输出语句溢出记录,单位-5,文件内部格式化写入

1 个答案:

答案 0 :(得分:0)

嗯,你声称你在链接上找到了你的答案,但你没有读得很好。

你不应该使用

 flabel=char(nwgrain(i))

只是将flabel设置为某些字符表中具有数字nwgrain(i)的某个特定于机器的字符,并且该字符恰好是笑容。

您必须使用内部写入语句作为链接​​建议。请参阅链接和其他重复链接以获取准确的解决方案Convert integers to strings to create output filenames at run time

您可能还需要'DDRX_GRAIN'//TRIM(FLABEL)//'.OUT'