read(106,*) 变量列表 这种,read括号里第二个位置是 *,的读取方式叫做表控格式。全称变量列表控制格式(List-Directed format)。 编译器产生的代码,执行过程是这样的: 先确定变量列表中有多少个变量。比如 read(106,*) GIRF_LAMDA(i),i=1,4 则需要读取4个变量。 从文件中读取一整行,根据顺序分别对应变量列表。 如果这一整行的数据量大于变量列表,则丢弃这一行后面多余的数据。结束读取。 如果这一整行的数据量等于变量列表,则直接结束读取。 如果这一整行的数据量小于变量列表,则继续读取下一个一整行,分配到剩余的变量列表,重复上述步骤。 直到读取到的数据量大于等于变量列表要求的数据量为止。 注意,编译器每次读取的单位是一整行。所以,如果文件中内容是: 1 2 3 4 5 那么 5 这个数据会被丢弃,而不会赋值给 GIRF_FI(1,1)。 |
根据你给出的代码片段来看。GIRD_LAMDA 和 GIRD_FI 本来就都在一个文档(GREEP.in)里面。 读取时,先读的 GIRD_LAMDA,后读的 GIRD_FI,那么文件里就先放 GIRD_LAMDA后放 GIRD_FI 就可以了。 一维数组二维数组,是Fortran程序的概念。对于文件来说是一样的。read 语句会把文件里的数据,根据程序中对变量定义的维度重新排列。 比如文件里内容是 0.5 , 0.06 , 0.007 , 0.0008 0.1,0.6,0.96,0.19 0.3,0.2,0.1,0.4 0.51,0.1,0.9,0.08 0.8,0.6,0.05,0.03 0.1,0.01,0.0,0.2 0.6,0.01,0.91,0.2 0.6,0.01,0.06,0.5 0.08,0.09,0.04,0.8 0.09,0.02,0.05,0.2 你读取了 GIRD_LAMDA,它的大小是4。接着读取了 GIRD_FI,它的大小是9*4那么红色部分会赋予给 GIRD_LAMDA,蓝色部分会赋予给 GIRD_FI 可以看彭国伦的《Fortran95程序设计》,本坛网盘里有。http://pan.fcode.cn |
fcode 发表于 2022-11-27 17:48 非常感谢您的回答。 还有点疑惑再请教您一下,我想要把GIRD_LAMDA(4)和GIRD_FI(4,9)的数据放到一个文档里边;GIRD_FI(4,9)是二维数组,是不是我只要把GIRD_LAMDA(4)的数据放在GIRD_FI(4,9)数据之前,读取时先读GIRD_LAMDA(4)后读GIRD_FI(4,9)就可以上述顺序放入文件读取进去就可以了; 还有个问题是GIRD_LAMDA(4)是一维数组,GIRD_FI(4,9)是二维数组,他俩数据的存放方式一样吗?文件里应如何设置才能保证他们能够位置正确,例如我后边想要调取GIRD_FI(2,3)这个数,怎么能确定是我想要的数据呢? 还有就是您这边有相关的书籍资料推荐吗,我对这一块很困惑,想弄懂清晰一点,谢谢啦! |
Q1. Fortran是一种编程语言,只要你理解文件的格式(存储方式,顺序,含义等),你可以用Fortran读取任何文件,比如mp3,avi,pdf,xls这些我们耳熟能详的文件。 Fortran本身并不规定任何文件格式。 所以,CREEP.in 和 CREEP.oup 可能是原来代码作者规定的文件格式。(而不是Fortran,因为Fortran不规定任何文件格式) 它们应该就是普通的txt纯文本文件。 Q2. 读写变量的顺序,不需要和变量的定义顺序相同。甚至读写的变量可以来自不同的定义位置(module,虚参,局部变量,common等) Q3. 如果是用 READ(106,*) (GIRD_LAMDA(i),i=1,4) 语句来读取的话。 可以用比较自由的形式在文件中存储。比如 0.5 , 0.06 , 0.007 , 0.0008 这种逗号间隔,也可以用空格间隔。甚至2行,每行2个 0.5 0.06 0.007 0.0008 也可以第一行1个,第二行3个 0.5 0.06 0.007 0.0008 其他组合也可以,例如第一行2个,第二行1个,第三行1个。都可以 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 09:38