Fortran 从数组而不是文件中读取
我有一个现有的Fortran 77程序,其中输入值是从输入文件读取的Fortran 从数组而不是文件中读取,fortran,Fortran,我有一个现有的Fortran 77程序,其中输入值是从输入文件读取的 read (unit=*, fmt=*) value 每次调用read语句时,它都会自动跳到文件中的下一行 是否可以用另一个数据容器(如数组)替换“引用”索引 例如: read (myarray, fmt=*) value 我试过了,但它总是读取第一个数组元素,不会自动跳转到下一个元素 我必须将每个read(unit=*,…)更改为read(array(I),…),并分别增加I以进入下一个元素 由于程序非常庞大,我正在寻找
read (unit=*, fmt=*) value
每次调用read语句时,它都会自动跳到文件中的下一行
是否可以用另一个数据容器(如数组)替换“引用”索引
例如:
read (myarray, fmt=*) value
我试过了,但它总是读取第一个数组元素,不会自动跳转到下一个元素
我必须将每个read(unit=*,…)
更改为read(array(I),…)
,并分别增加I
以进入下一个元素
由于程序非常庞大,我正在寻找一种方法来保留现有的read语句,并且只更改数据源
因此,单元
不是一个整数值,而是一个数组,其中每个元素都是我输入文件中的一行
read (unit=*, fmt=*) value
有人有主意吗
我试图用代码描述这个问题:
(input_file.input仅包含15行数字1到15)
是的,在您的示例中,您必须始终使用
(i)
语法读取相应的数组元素。我看不到别的办法
但是,通常可以在多个记录中使用字符数组作为文件,而无需使用元素索引。考虑这一点:
integer :: i, n=15
character*130, dimension(100) :: inp_values
character*130 :: value
integer :: values(100)
do i = 1, n
write(value,*) i
inp_values(i) = value
end do
read(inp_values,'(*(i130,/))') values(1:n)
write(*,*) values(1:n)
甚至
read(inp_values,*) values(1:n)
请务必记住,内部文件不会跟踪其打开位置。该位置仅在每个
write
或read
语句中有效。与外部文件不同,内部文件没有持久位置的概念(在输入/输出语句之间)。在这方面,如果希望一条read语句从一条记录传输,下一条read语句从另一条记录传输,则必须直接引用这些记录
但是,您没有显示您真正想要如何使用输入。如果您可以使用单个read语句重新写入输入,则相应的记录将成为源
例如,如果您可以重写
do i=1,5
read(unit, '(I5)') x(i)
end do
作为
然后,您可以轻松切换到使用内部文件。欢迎,请阅读欢迎。学习问题编辑器的格式设置功能将使您的问题更具可读性。很抱歉,您向我们展示的代码远远不够。您必须告诉我们如何声明这些数组以及它们是什么数据类型。它们是
字符字符串吗?同时向我们展示实际使用read
语句的代码。你能在一条语句中而不是在循环中进行更多的阅读吗?一个隐含的可能吗?我们必须看到更多的代码。嗨,弗拉基米尔,你是对的,我发现很难解释我的问题。。很抱歉我编辑了这篇文章并添加了一些代码。基本上,我的问题是,如果我从文件中读取,read语句总是跳到下一行,如果我从数组中读取,则不会跳到下一行。我希望将当前直接从输入文件读取的所有read语句保留在代码中(整数::inpid),并将inpid的数据类型更改为数组(字符,维度::inpid)如果目标是尽可能保持代码不变,则可以将数组写入文件并读回..了解字符数组很好。。但就我而言,恐怕我必须更改代码。非常感谢你!非常感谢,我对内部和外部文件一无所知。在我的情况下,我必须更改代码中的read语句并直接引用它们。我对输入有很大的限制。
read(unit, '(I5,/)') x(1:5)