Fortran Coder

查看: 122|回复: 10

[文件读写] Fortran直接文本文件读写问题

[复制链接]

20

帖子

3

主题

0

精华

入门

F 币
86 元
贡献
51 点
发表于 2017-11-18 11:24:16 | 显示全部楼层 |阅读模式
我直接方式打开了一个文本文件,怎么才能在一个rec(例如rec=1)里写入多行数据,比如我可不可以在rec=1里输100个整数,每10个数换一行??
还有对于二进制文件10,WRITE(10,REC=1)1,(0,I=1,99)这条语句写入的数是写入rec=1这条记录吗还是全部写入文件10后到rec=100??
谢谢大家!!!!
回复

使用道具 举报

485

帖子

0

主题

0

精华

宗师

F 币
1070 元
贡献
445 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2017-11-18 11:39:46 | 显示全部楼层
第一个问题,带换行符的输出就可以了。
write(13,"(10(10es13.6,/))") a(1:100)

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

20

帖子

3

主题

0

精华

入门

F 币
86 元
贡献
51 点
 楼主| 发表于 2017-11-18 12:04:27 | 显示全部楼层
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)
能达到我想要的效果吗?

485

帖子

0

主题

0

精华

宗师

F 币
1070 元
贡献
445 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2017-11-18 14:15:14 | 显示全部楼层
本帖最后由 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


20

帖子

3

主题

0

精华

入门

F 币
86 元
贡献
51 点
 楼主| 发表于 2017-11-19 15:25:42 | 显示全部楼层
vvt 发表于 2017-11-18 14:15
试试这样
[mw_shl_code=fortran,true]Program Main
  Integer :: a(100)

您好,那个CRLF=char(13)//char(10)什么意思啊

20

帖子

3

主题

0

精华

入门

F 币
86 元
贡献
51 点
 楼主| 发表于 2017-11-19 16:51:21 | 显示全部楼层
   
[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
 
您能看看为什么我的这个运行一直报错吗

485

帖子

0

主题

0

精华

宗师

F 币
1070 元
贡献
445 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2017-11-19 19:50:41 | 显示全部楼层
CRLF的意思是“换行符”,你可以百度了解 CRLF
我给你的多好的代码,干嘛自己擅自修改?还改得那么丑不拉几的。

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

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

20

帖子

3

主题

0

精华

入门

F 币
86 元
贡献
51 点
 楼主| 发表于 2017-11-19 20:35:07 | 显示全部楼层
vvt 发表于 2017-11-19 19:50
CRLF的意思是“换行符”,你可以百度了解 CRLF
我给你的多好的代码,干嘛自己擅自修改?还改得那么丑不拉几 ...

您好, 谢谢您的回答,这个不是我必须要固定格式,只是我要改一个程序的源码,源码是固定格式的,所以我只能用固定格式,就自己试着把您给的这段自由格式改成固定格式的了,这个Character C应该怎么定义比较好啊

485

帖子

0

主题

0

精华

宗师

F 币
1070 元
贡献
445 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2017-11-19 20:44:03 | 显示全部楼层
Character(len=420) :: c
就这样定义,无需修改。

20

帖子

3

主题

0

精华

入门

F 币
86 元
贡献
51 点
 楼主| 发表于 2017-11-19 20:48:17 | 显示全部楼层
vvt 发表于 2017-11-19 20:44
Character(len=420) :: c
就这样定义,无需修改。

您好,我如果在固定格式里也可以对吗?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|QQ群|Fcode

GMT+8, 2017-12-18 15:05

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表