【发布时间】:2018-10-03 09:57:03
【问题描述】:
我有一个现有的 Fortran 77 程序,其中输入值是从输入文件中读取的。
read (unit=*, fmt=*) value
read 语句每次调用都会自动跳转到文件的下一行。
是否可以用另一个数据容器(如数组)替换“引用”索引?
例如:
read (myarray, fmt=*) value
我试过了,但它总是读取第一个数组元素并且不会自动跳转到下一个元素。
我必须将每个 read(unit=*, ...) 更改为 read(array(i), ...) 并分别增加 i 才能到达下一个元素。
由于程序很大,我正在寻找一种方法来保留现有的读取语句并只需更改数据源。
所以unit 不会是一个整数值,而是一个数组,其中每个元素都是我输入文件中的一行。
有人有想法吗?
我试图用代码描述问题: (input_file.input 只有 15 行,数字为 1 到 15)
program FortranInput
implicit none
! Variables
integer :: i, inpid
character*130, dimension(100) :: inp_values
character*130 :: value
inpid = 20
! Open File
open(inpid, file='input_file.input')
! Read from file ------------------------------------------------
do i = 1, 15
! read always takes the next line in the file
read(inpid,'(a130)') value
! write each line to new array-element
inp_values(i) = value
! output each line from file to screen
write(*,*) value
end do
close (inpid)
! Read from array -----------------------------------------------
do i = 1, 15
! read always takes the first line in the array
read(inp_values,'(a130)') value
write(*,*) value
end do
end program FortranInput
【问题讨论】:
-
欢迎,请接受欢迎tour 并阅读How to Ask。学习一下问题编辑器的格式化功能,让你的问题更具可读性会很好。
-
很抱歉,您向我们展示的代码还远远不够。您必须告诉我们这些数组是如何声明的以及它们是什么数据类型。它们是
character字符串吗?还向我们展示您实际使用read语句的代码。你能在一个语句而不是循环中做更多的阅读吗?也许是一个隐含的行为?我们必须看到更多代码。 -
嗨弗拉基米尔,你是对的,我发现很难解释我的问题..对不起!我编辑了帖子并添加了一些代码。基本上我的问题是,如果我从文件中读取,READ-Statement 总是跳到下一行,如果我从数组中读取,它不会。
-
我想将我所有的 READ 语句保留在当前直接从输入文件(整数 :: inpid)读取的代码中,并将 inpid 的数据类型更改为数组(字符,维度::inpid)
-
如果目标是尽可能保持代码相同,您可以将数组写入文件并读回..
标签: fortran