Fortran Coder

查看: 18868|回复: 10
打印 上一主题 下一主题

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

[复制链接]

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
跳转到指定楼层
楼主
发表于 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??
谢谢大家!!!!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
沙发
发表于 2017-11-18 11:39:46 | 只看该作者
第一个问题,带换行符的输出就可以了。
write(13,"(10(10es13.6,/))") a(1:100)

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

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
板凳
 楼主| 发表于 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)
能达到我想要的效果吗?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

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


35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
5#
 楼主| 发表于 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)什么意思啊

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
6#
 楼主| 发表于 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
 
您能看看为什么我的这个运行一直报错吗

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

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

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

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

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
8#
 楼主| 发表于 2017-11-19 20:35:07 | 只看该作者
vvt 发表于 2017-11-19 19:50
CRLF的意思是“换行符”,你可以百度了解 CRLF
我给你的多好的代码,干嘛自己擅自修改?还改得那么丑不拉几 ...

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
9#
发表于 2017-11-19 20:44:03 | 只看该作者
Character(len=420) :: c
就这样定义,无需修改。

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
10#
 楼主| 发表于 2017-11-19 20:48:17 | 只看该作者
vvt 发表于 2017-11-19 20:44
Character(len=420) :: c
就这样定义,无需修改。

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

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-20 06:07

Powered by Tencent X3.4

© 2013-2024 Tencent

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