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