Fortran Coder

查看: 166|回复: 10

[文件读写] 求助大佬们,这段程序read的.txt文件的格式应该是什么样的...

[复制链接]

6

帖子

1

主题

0

精华

入门

F 币
29 元
贡献
16 点
发表于 2022-7-22 14:35:04 | 显示全部楼层 |阅读模式
本帖最后由 阿_玮 于 2022-7-23 15:45 编辑

这段程序输入文件SUR.TXT 里面的内容试了很多种形式,一直是无法成功运行,读取不成功,想知道.TXT文件中的数据应该是怎么样的一种格式,望各位大佬赐教
[Fortran] 纯文本查看 复制代码
INTEGER NX,NY
REAL*8 XE1,YE1
REAL*8, ALLOCATABLE :: H(:,:)

OPEN(1,FILE="SUR.TXT")
                READ(1,400) NX,NY,XE1,YE1,DX,DY
                ALLOCATE(H(0:NX-1,0:NY-1))
                DO I=0,NX-1
                        READ(1,300) (H(I,J),J=0,NY-1)
                ENDDO
                READ(1,*) B,C,K        
        CLOSE(1)
300        FORMAT(1X,5E16.8)
400        FORMAT(2X,2I4,4X,4E16.8)
DXR=XE1/(NX-1)
DYR=YE1/(NY-1)




170

帖子

2

主题

0

精华

宗师

F 币
1648 元
贡献
792 点

规矩勋章

发表于 2022-7-22 20:12:48 | 显示全部楼层
需给出sur.txt内容才能判断。

38

帖子

3

主题

0

精华

熟手

F 币
154 元
贡献
77 点
发表于 2022-7-22 20:33:53 | 显示全部楼层
按照你写的,read(1,400)后面读了2个整数,4个单精度的科学计数法的数,一共6个值。但你的sur.txt文件中到底写了啥就不知道了,有没有6个值不知道,6个值类型是不是整数不知道,这6个变量类型声明你也没抄,有没有错误也不知道。

6

帖子

1

主题

0

精华

入门

F 币
29 元
贡献
16 点
 楼主| 发表于 2022-7-22 21:10:48 | 显示全部楼层
zjk0112 发表于 2022-7-22 20:33
按照你写的,read(1,400)后面读了2个整数,4个单精度的科学计数法的数,一共6个值。但你的sur.txt文件中到 ...

因为这个程序对应的sur.txt文件我也没有,所以就想能不能根据它读取的这些信息反推下.txt的文件格式。
感谢感谢
[Fortran] 纯文本查看 复制代码
INTEGER NX,NY
REAL*8 XE1,YE1
REAL*8, ALLOCATABLE :: H(:,:)

DXR=XE1/(NX-1)
DYR=YE1/(NY-1)

6

帖子

1

主题

0

精华

入门

F 币
29 元
贡献
16 点
 楼主| 发表于 2022-7-22 21:12:42 | 显示全部楼层
风平老涡 发表于 2022-7-22 20:12
需给出sur.txt内容才能判断。

感谢解答,因为这个文件我也没有,所以就想编点数据进去,运行下程序

194

帖子

2

主题

0

精华

宗师

F 币
1468 元
贡献
767 点

规矩勋章

发表于 2022-7-23 10:52:33 | 显示全部楼层
大概这样:
  00010002      0.12345678E+01  0.12345678E+01  0.12345678E+01  0.12345678E+01
   0.12345678E+01  0.12345678E+01

67

帖子

0

主题

0

精华

专家

F 币
415 元
贡献
206 点

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

QQ
发表于 2022-7-23 18:34:13 | 显示全部楼层
本帖最后由 青衣巷 于 2022-7-23 19:21 编辑

你有源代码,改成
[Fortran] 纯文本查看 复制代码
INTEGER NX,NY
REAL*8 XE1,YE1
REAL*8, ALLOCATABLE :: H(:,:)

OPEN(1,FILE="SUR.TXT")
                READ(1,*) NX,NY,XE1,YE1,DX,DY
                ALLOCATE(H(0:NX-1,0:NY-1))
                DO I=0,NX-1
                        READ(1,*) H(I,:)
                ENDDO
                READ(1,*) B,C,K        
        CLOSE(1)
DXR=XE1/(NX-1)
DYR=YE1/(NY-1)

就简单多了。

大部分时候,read都不需要指定格式。

彼岸,有永恒的守候...

6

帖子

1

主题

0

精华

入门

F 币
29 元
贡献
16 点
 楼主| 发表于 2022-7-24 11:05:52 | 显示全部楼层
necrohan 发表于 2022-7-23 10:52
大概这样:
  00010002      0.12345678E+01  0.12345678E+01  0.12345678E+01  0.12345678E+01
   0.12345 ...

非常感谢

6

帖子

1

主题

0

精华

入门

F 币
29 元
贡献
16 点
 楼主| 发表于 2022-7-24 11:07:12 | 显示全部楼层
青衣巷 发表于 2022-7-23 18:34
你有源代码,改成
[mw_shl_code=fortran,true]INTEGER NX,NY
REAL*8 XE1,YE1

感谢指点,改了下源代码后,试了试,可以运行了,学到了学到了,非常感谢

38

帖子

3

主题

0

精华

熟手

F 币
154 元
贡献
77 点
发表于 2022-7-25 10:29:15 | 显示全部楼层
青衣巷 发表于 2022-7-23 18:34
你有源代码,改成
[mw_shl_code=fortran,true]INTEGER NX,NY
REAL*8 XE1,YE1

你这个I = 0,NX-1容易数组越界。你这不是C。Fortran这么干,经常在intel的编译器不报错,在别的编译器就报错。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2022-8-11 06:59

Powered by Tencent X3.4

© 2013-2022 Tencent

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