在Fortran中读取ASCII文件

时间:2012-10-25 22:35:02

标签: file fortran ascii

我有一个问题。我的桌面上有一个完整数字的ASCII文件,但我需要知道如何使用FORTRAN读取ASCII文件。你能告诉我一个如何完成它或者命令是什么的例子吗?

1 个答案:

答案 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”分配一个空闲的单元号。