Fortran Coder

标题: Fortran直接文本文件读写问题 [打印本页]

作者: qs2017    时间: 2017-11-18 11:24
标题: Fortran直接文本文件读写问题
我直接方式打开了一个文本文件,怎么才能在一个rec(例如rec=1)里写入多行数据,比如我可不可以在rec=1里输100个整数,每10个数换一行??
还有对于二进制文件10,WRITE(10,REC=1)1,(0,I=1,99)这条语句写入的数是写入rec=1这条记录吗还是全部写入文件10后到rec=100??
谢谢大家!!!!
作者: vvt    时间: 2017-11-18 11:39
第一个问题,带换行符的输出就可以了。
write(13,"(10(10es13.6,/))") a(1:100)

第二个问题,写入rec=1这一条记录。
题外话:尽量不要用“有格式直接读写”

作者: qs2017    时间: 2017-11-18 12:04
vvt 发表于 2017-11-18 11:39
第一个问题,带换行符的输出就可以了。
write(13,"(10(10es13.6,/))") a(1:100)

您好,我的第一个问题是想进行文本文件的直接读写,我做的东西必须有格式直接读写才行,这个文本文件号是13的话,我这样写对吗
120 FORMAT(10(10ES13.6,/))
WRITE(13,120,REC=1) a(1:100)
能达到我想要的效果吗?

作者: vvt    时间: 2017-11-18 14:15
本帖最后由 vvt 于 2017-11-18 14:37 编辑

试试这样
[Fortran] 纯文本查看 复制代码
Program Main
  Integer :: a(100)
  Character(len=2) , parameter :: CRLF = char(13)//char(10)
  Character(len=420) :: c
  integer :: i , j
  open(13,File="test.txt",access="direct",form="formatted",recl=420)
  Do i = 1 , 4
    do j = 1 , 100
      a(j) = i*100 + j
    end do
    WRITE(c,120) (a(j:j+9),CRLF,j=1,100,10)
    write(13,"(a)",REC=i) c
  ENd Do
  Close(13)
120 FORMAT(10(10i4,a))
End Program Main



作者: qs2017    时间: 2017-11-19 15:25
vvt 发表于 2017-11-18 14:15
试试这样
[mw_shl_code=fortran,true]Program Main
  Integer :: a(100)

您好,那个CRLF=char(13)//char(10)什么意思啊
作者: qs2017    时间: 2017-11-19 16:51
   
[Fortran] 纯文本查看 复制代码
 subroutine TEXT2
      INTEGER A
      DIMENSION A(100)
      CHARACTER CRLF
      CHARACTER C(420)
      INTEGER i,j
      CHARACTER*80 ASCLIB
  120 format(10(10i4,a2))
      ASCLIB='45GTEST.txt'
      crlf=char(13)//char(10)
      OPEN(11,FILE=ASCLIB,STATUS='REPLACE',ACCESS='DIRECT',
     1         FORM='FORMATTED',RECL=420)
      DO i=1,100
          a(i)=55
      end do
      write(c,120) (a(j:j+9),CRLF,j=1,91,10)
      write(11,'(a)',rec=1) c
      close (11)
      return
      END
您能看看为什么我的这个运行一直报错吗
作者: vvt    时间: 2017-11-19 19:50
CRLF的意思是“换行符”,你可以百度了解 CRLF
我给你的多好的代码,干嘛自己擅自修改?还改得那么丑不拉几的。

重点:
Character(len=420) :: c
不能改为
CHARACTER C(420)

此外:
出错要给错误提示
请放弃固定格式

作者: qs2017    时间: 2017-11-19 20:35
vvt 发表于 2017-11-19 19:50
CRLF的意思是“换行符”,你可以百度了解 CRLF
我给你的多好的代码,干嘛自己擅自修改?还改得那么丑不拉几 ...

您好, 谢谢您的回答,这个不是我必须要固定格式,只是我要改一个程序的源码,源码是固定格式的,所以我只能用固定格式,就自己试着把您给的这段自由格式改成固定格式的了,这个Character C应该怎么定义比较好啊
作者: vvt    时间: 2017-11-19 20:44
Character(len=420) :: c
就这样定义,无需修改。
作者: qs2017    时间: 2017-11-19 20:48
vvt 发表于 2017-11-19 20:44
Character(len=420) :: c
就这样定义,无需修改。

您好,我如果在固定格式里也可以对吗?
作者: vvt    时间: 2017-11-19 22:27
对的                           




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2