我有一个问题。我的桌面上有一个完整数字的ASCII文件,但我需要知道如何使用FORTRAN读取ASCII文件。你能告诉我一个如何完成它或者命令是什么的例子吗?
答案 0 :(得分:3)
你没有提供很多细节,所以我将在这里做一些假设。假设您的文件由3列浮点数组成,即
1.2345 -4.222e7 2.229
77.222 77e7 50
...
如果你只想读取这些数字而不将它们存储在一个数组中,这可以直接进行,因为
integer :: unit
real :: a,b,c
unit = 20
open(unit,"foo.txt",status="old",action="read")
do
read(unit,*,end=1) a, b, c
write(*,*) "I got", a, b, c
end do
1 close(unit)
但是,如果要将这些数字存储为数组,首先需要分配适当的空间量,您需要知道行数。遗憾的是,这需要初步通过该文件,因为Fortran不提供增长的阵列,并且自己实施替换是不方便的。假设你使用fortran 90或更新版本,这看起来像这样:
integer :: unit, i, n
real, allocatable :: data(:,:)
unit = 20
open(unit,"foo.txt",status="old",action="read")
n = 0
do
read(unit,*,end=1)
n = n+1
end do
1 rewind(unit)
allocate(data(n,3))
do i = 1, n
read(unit,*) data(i,:)
end do
close(unit)
单位编号只是用户选择的一些唯一编号。请注意,一些低数字具有预定义的含义。定义一个像getlun()这样的函数是很常见的,它会为你提供一个免费的单元号。快速谷歌搜索产生了这个:http://ftp.cac.psu.edu/pub/ger/fortran/hdk/getlun.f90。如果你有一个足够新的编译器,你可以使用open(newunit = unit,...),它会自动为变量“unit”分配一个空闲的单元号。