回 帖 发 新 帖 刷新版面

主题:[讨论]关于fortran 直接读取文件的REC设定问题!

fortran中的数据读取,若采用直接读取的方式,

open(unit=11,file='a.txt',status='old',iostat=error,&
        &access='direct',form='formatted',recl=37)
do i=1,N,5
     read(11,'(A)') linebuffer
     read (linebuffer,'(13X,I5),(31X,I5)',rec=i) value_ibtyp,value_ibdir

这里的rec可不可以设定为i,因为我希望程序读取特定行的数据给相应的变量。

但是编译的时候出现错误:

read (linebuffer,'(13X,I5,31X,I5)',rec=1) value(j)%value_jbcs,&
                                            1
错误: REC tag at (1) is incompatible with internal file



回复列表 (共6个回复)

沙发

直接读取,只适合与文件,不适合与内部文件

read (linebuffer,"(13X,I5,31X,I5)",rec=1) value(j)%value_jbcs,&

linebuffer 是一个字符串变量,是你临时读入的。
在这个字符串变量上,你不能再分记录来读取了。

你的本意是否应该是
read(11,rec 

板凳

原来你最懂我~~~
可否求QQ?学习fortran中有不懂的便于咨询,绝不随便骚扰!或者您创建的群也可

3 楼

在我上个问题中,您提供的代码的确很好很强大!
但是我在尝试对其进行修改的时候出现了问题:
我尝试将其改为格式化输出:
您提供的原代码:
 write( *, * ) iA
我修改格式输出的代码:
 write( *, '(8(A5,A1))' ) iA
但是只要一采用格式输出,输出结果就变为2进制数据,无法查看。请问这是什么原因?
未修改的结果图:
[img]http://www.tu265.com/di-817e5743082e744e441a789155e52a89.png[/img]
修改第一行的结果图:
[img]http://www.tu265.com/di-d8c5220aaac152b1c4e19a172e5f8df9.png[/img]
全修改的结果图:
[img]http://p13.freep.cn/p.aspx?u=v20_p13_photo_1211122248226493_0.png[/img]

4 楼

改为
write( *, "(8(A5,1x))" ) iA

5 楼

我在3楼描述的不准确:
我是想将数据格式化输出,并且每个数据后面带一个“,”
所以采用:
write( *, '(8(A5,A1))' ) iA,‘,’
结果变为unformatted~~
我只格式化输出数据,不带‘,’,命令如下:
write( *, '(8(A5))' ) iA
结果:
[img]http://www.tu265.com/di-9ae585a627852c8474d546007e779982.jpg[/img]

我发现对字符进行格式化没问题,数据不能格式化输出~~
call GetArrayFromFile( 12 , 'IBTYP' , iA , j )
      write ( 100 , 120 ) 'IBTYP ='
       120 format ( 4X,A7)
      write ( 100 , * ) iA
[img]http://www.tu265.com/di-9df0819a659f873e6b992125cef1582d.jpg[/img]

6 楼

哈哈,我也搞错了。

iA 是整数数组,所以得用 i5 而不是 a5

这样就行了
write( * , ’(a,8(i5,","))’ ) "IBTYP =" , iA

我来回复

您尚未登录,请登录后再回复。点此登录或注册