0

文字と数字の別々の行でtxtファイルを読み取り、それらを20要素の1D配列に書き込むFortranコードがあります。このコードは、Fortran 77 コンパイラ Force 2.0.9 と互換性がありません。私の質問は、Fortran 77 コンパイラを使用して前述の手順をどのように適用できるかということです。つまり、1D 配列を定義し、txt ファイルを 1 行ずつ配列の要素に書き込むということです。

前もって感謝します。

txt ファイルは次のとおりです。

ケース 1:

10  0  1  2  0

1.104  1.008  0.6   5.0

25  125.0  175.0  0.7  1000.0

0.60

1  5

高度なケース

15 53 0 10 0 1 0 0 1 0 0 0 0

0 0 0 0

0 0 1500.0 0 0 .03

0 0.001 0

0.1 0 0.125 0.08 0.46

0.1 5.0 0.04

@ Jason: 私は初心者で、まだ Fortran を学んでいます。Force 2 は g77 を使用していると思います。以下は、元のコードの対応する部分です。その結果、Force 2 エディターは空の txt ファイルを返します。

       DIMENSION CARD(20)
       CHARACTER*64 FILENAME
       DATA XHEND / 4HEND  /

       OPEN(UNIT=3,FILE='CON')
       OPEN(UNIT=4,FILE='CON')
       OPEN(UNIT=7,STATUS='SCRATCH')

       WRITE(3,9000) 'PLEASE ENTER THE INPUT FILE NAME : '
  9000 FORMAT (A)
       READ(4,9000) FILENAME

       OPEN(UNIT=5,FILE=FILENAME,STATUS='OLD')
       WRITE(3,9000) 'PLEASE ENTER THE OUTPUT FILE NAME : '
       READ(4,9000) FILENAME
       OPEN(UNIT=6,FILE=FILENAME,STATUS='NEW')
       FILENAME = '...'

       IR = 7
       IW = 6
       IP = 15
  5    REWIND IR
       I = 0
  2    READ (5,7204,END=10000) CARD
       IF (I .EQ. 0 ) WRITE (IW,7000)
  7000 FORMAT (1H1 / 10X,15HINPUT DECK ECHO / 10X,15(1H-))
       I= I + 1
       WRITE (IW,9204)  I,CARD
       IF (CARD(1) .EQ. XHEND ) GO TO 7020
       WRITE (IR,7204) CARD
  7204 FORMAT (20A4)
  9204 FORMAT (1X,I4,2X,20A4)
       GO TO 2
  7020 REWIND IR         
4

1 に答える 1

4

CARD は 4 文字の文字列を 20 個保持するために使用されているようです。宣言が文字変数としてではなく、配列としてのみ表示されるため、非常に古い FORTRAN スタイルでは、文字を保持するために非文字変数が使用されているのではないでしょうか? 20A4 形式を使用しているため、値は 4 文字の 20 グループとして正確にファイルに配置する必要があります。空白を追加して、4 列のグループに整列させる必要があります。

数値を読みたい場合は、それらを数値型に読み込んで、リスト指向の IO を使用する方がはるかに簡単です。

real values (20)
read (5, *) values

そうすれば、ファイル内の値の正確な配置について心配する必要がなくなります。

これは本当に古風な FORTRAN です ... FORTRAN-77 より前のスタイルですらあります。ホレリス (H) フォーマットを最後に見たのはいつか思い出せません! あなたはこれをどこから学んでいますか?

編集: 多くのプログラミング タスクで Fortran が好きですが、FORTRAN 66 は使用しません。コンピューターは物事を簡単にするはずです...文字数を数えなければならない理由はありません。それ以外の

7000 FORMAT (1H1 / 10X,15HINPUT DECK ECHO / 10X,15(1H-))

使用できます

7000 FORMAT ( / 10X, "INPUT DECK ECHO" / 10X, 15("-") )

ホレリス コードを使用する理由は 2 つだけ考えられます。レガシー ソース コードをわざわざ変更しないためです (現在の Fortran コンパイラが 30 年前に廃止された機能を処理できることは注目に値します! Fortran ソース コードは決して死なない!)。コンピューティング言語の歴史。この名前は、1880 年の国勢調査が 8 年かかったのに対し、1890 年の国勢調査を 1 年で達成した偉大なコンピューティングのパイオニアに敬意を表しています: http://en.wikipedia.org/wiki/Herman_Hollerith

今日、最初の列の「1」が「キャリッジ コントロール」を実行しているとは思えません。「1」がページ排出のコードであることを調べなければなりませんでした。出力に表示される可能性がはるかに高くなります。Fortran 制御文字 (キャリッジ制御) はまだコンパイラに実装されていますか?を参照してください。

于 2012-07-27T22:47:15.967 に答える