gpt4 book ai didi

fortran - 在fortran 90中打开并读取一行数据

转载 作者:行者123 更新时间:2023-12-02 21:29:35 45 4
gpt4 key购买 nike

我做了一些虚拟代码来学习打开和读取文件。假设我有以下 test.dat,其内容为

1
2
3
4
5
6
7
8
9
10

我编写了以下代码来打开并读取数据文件

subroutine readdata
implicit none

integer :: j
double precision :: test

open(unit = 100, file = 'test.dat', status = 'old', action = 'read')
do j = 1, 10
read(100,*) test
print *, 'N1=', test
end do

end subroutine

输出如下所示,符合预期

 gfortran -g  -I/usr/include -o main main.o subroutines.o -L/usr/lib64/liblapack -L/usr/lib64/libblas
test= 1.0000000000000000
test= 2.0000000000000000
test= 3.0000000000000000
test= 4.0000000000000000
test= 5.0000000000000000
test= 6.0000000000000000
test= 7.0000000000000000
test= 8.0000000000000000
test= 9.0000000000000000
test= 10.000000000000000
Main finished.

但是,如果数据存储在单行中,如下所示

1 2 3 4 5 6 7 8 9 10

那么上面的代码就不能按预期工作。它只读取行中的第一个元素,然后提示错误

sharwani@linux-h6qd:~/PHD_research/myCodes/data> ./runcase.sh
rm -f *.o *.mod *.MOD *.exe *.stackdump main
gfortran -g -I/usr/include -c main.f90
gfortran -g -I/usr/include -c subroutines.f90
gfortran -g -I/usr/include -o main main.o subroutines.o -L/usr/lib64/liblapack -L/usr/lib64/libblas
test= 1.0000000000000000
At line 9 of file subroutines.f90 (unit = 100, file = 'test.dat')
Fortran runtime error: End of file

所以,我的问题是我有一个数据文件,其中包含存储在单行中的 2879 (1 x 2879) 个数字。我如何打开并读取数据文件中的所有这些数字?

最佳答案

默认情况下,每个 Fortran read 语句都会读取值列表,然后前进到下一行的开头。将read想象为在工作时在输入文件中移动光标。所以你的陈述

read(100,*) test
当输入文件中的数字位于不同的行时,

会执行您所期望的操作。当它们都位于文件中的同一行时,第一个读取语句读取一个值(即 test),然后前进到下一行的开头以读取下一个值,但没有下一个值行,您会收到向我们展示的运行时错误。

有 2 个简单的解决方案。

一,您可以从一个语句中的一行读取多个值,例如,您可以声明

real, dimension(10) :: test

然后

read(100,*) test

应该一次性将所有值放入数组中。

其次,您可以使用non-advancing 输入,它告诉处理器在每个read 语句之后不要跳到下一行的开头。类似以下内容(根据您的情况检查编辑描述符)

read(100,'(f8.2)',advance='no') test

如果您选择后一种方法,请不要忘记,在读取一行中的所有值后,您确实想要跳到下一行的开头,因此您可能需要执行诸如

read(100,*)

它不会读取任何值,但会前进到下一行。

关于fortran - 在fortran 90中打开并读取一行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19421382/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com