-1

質問があります。デスクトップに数字でいっぱいの ASCII ファイルがありますが、FORTRAN を使用して ASCII ファイルを読み取る方法を知る必要があります。それがどのように行われたか、またはそれがどのコマンドであるかの例を教えてもらえますか?

4

1 に答える 1

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() のような関数を定義するのが一般的です。Google ですばやく検索すると、http://ftp.cac.psu.edu/pub/ger/fortran/hdk/getlun.f90が見つかりました。十分に新しいコンパイラがある場合は、 open(newunit=unit,...) を使用できます。これにより、空きユニット番号が変数「unit」に自動的に割り当てられます。

于 2012-10-26T14:32:56.110 に答える