Fortran Coder

标题: 求助大佬们,这段程序read的.txt文件的格式应该是什么样的... [打印本页]

作者: 阿_玮    时间: 2022-7-22 14:35
标题: 求助大佬们,这段程序read的.txt文件的格式应该是什么样的...
本帖最后由 阿_玮 于 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)





作者: 风平老涡    时间: 2022-7-22 20:12
需给出sur.txt内容才能判断。
作者: zjk0112    时间: 2022-7-22 20:33
按照你写的,read(1,400)后面读了2个整数,4个单精度的科学计数法的数,一共6个值。但你的sur.txt文件中到底写了啥就不知道了,有没有6个值不知道,6个值类型是不是整数不知道,这6个变量类型声明你也没抄,有没有错误也不知道。
作者: 阿_玮    时间: 2022-7-22 21:10
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)

作者: 阿_玮    时间: 2022-7-22 21:12
风平老涡 发表于 2022-7-22 20:12
需给出sur.txt内容才能判断。

感谢解答,因为这个文件我也没有,所以就想编点数据进去,运行下程序
作者: necrohan    时间: 2022-7-23 10:52
大概这样:
  00010002      0.12345678E+01  0.12345678E+01  0.12345678E+01  0.12345678E+01
   0.12345678E+01  0.12345678E+01
作者: 青衣巷    时间: 2022-7-23 18:34
本帖最后由 青衣巷 于 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都不需要指定格式。


作者: 阿_玮    时间: 2022-7-24 11:05
necrohan 发表于 2022-7-23 10:52
大概这样:
  00010002      0.12345678E+01  0.12345678E+01  0.12345678E+01  0.12345678E+01
   0.12345 ...

非常感谢
作者: 阿_玮    时间: 2022-7-24 11:07
青衣巷 发表于 2022-7-23 18:34
你有源代码,改成
[mw_shl_code=fortran,true]INTEGER NX,NY
REAL*8 XE1,YE1

感谢指点,改了下源代码后,试了试,可以运行了,学到了学到了,非常感谢
作者: zjk0112    时间: 2022-7-25 10:29
青衣巷 发表于 2022-7-23 18:34
你有源代码,改成
[mw_shl_code=fortran,true]INTEGER NX,NY
REAL*8 XE1,YE1

你这个I = 0,NX-1容易数组越界。你这不是C。Fortran这么干,经常在intel的编译器不报错,在别的编译器就报错。
作者: 青衣巷    时间: 2022-7-25 14:11
zjk0112 发表于 2022-7-25 10:29
你这个I = 0,NX-1容易数组越界。你这不是C。Fortran这么干,经常在intel的编译器不报错,在别的编译器就 ...

这个代码段是楼主给出来的。我没有修改其数组下限。

我也很少用0做为下限,的确不应该用C的逻辑来考虑Fortran的问题。

但即便这么做了,用了0做为下限,控制得当的话,也可以有效避免越界问题。这不是Fortran的缺陷。
当你用0做为下限,而越界了。应该首先考虑是否是自身的问题。而不是得出结论,说Fortran不要这么做。




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