5

Fortran がファイルからデータを読み取るときに、アスタリスク (*) で始まる行をコメントと見なしてスキップすることを理解しています。さて、私が作成した非常に単純なプログラムでこの動作を実現するのに問題があるようです。これは私の単純な Fortran プログラムです。

  1       program test
  2 
  3       integer dat1
  4 
  5       open(unit=1,file="file.inp")
  6 
  7       read(1,*) dat1
  8 
  9 
 10       end program test

これは「file.inp」です。

  1 *Hello
  2 1

で簡単なプログラムを作成しました

gfortran -g -o test test.f90

実行すると、次のエラーが表示されます。

At line 7 of file test.f90 (unit = 1, file = 'file.inp')
Fortran runtime error: Bad integer for item 1 in list input

コメント行を削除して入力ファイルを実行すると、次のようになります。

1 1

コードは正常に実行されます。そのため、Fortran がそのコメント行を正しく解釈することに問題があるようです。ここに欠けているのは非常に単純なものに違いありませんが、Googleで何も見つけることができません。

4

3 に答える 3

8

Fortran は、入力ファイルのコメント行を自動的にスキップしません。最初に行を文字列に読み取り、コメント記号の最初の文字をチェックするか、その記号の文字列を検索することで、これを簡単に行うことができます。次に、行がコメントでない場合は、文字列の「内部読み取り」を実行して数値を取得します。

何かのようなもの:

use, intrinsic :: iso_fortran_env

character (len=200) :: line
integer :: dat1, RetCode

read_loop: do
   read (1, '(A)', isostat=RetCode)  line
    if ( RetCode == iostat_end)  exit ReadLoop
    if ( RetCode /= 0 ) then
      ... read error
      exit read_loop
    end if
    if ( index (line, "*") /= 0 )  cycle read_loop
    read (line, *) dat1
end do read_loop
于 2012-04-21T15:19:01.920 に答える
0

Fortran は、名前リストを使用していない限り、デフォルトでは何も無視しません。その場合、コメントは感嘆符で始まります。

于 2012-09-28T06:05:12.687 に答える