FORTRAN(tacコマンドを作るその2)

前回作ったプログラムで、複数ファイル指定時の表示を確認してみます。

takk@deb9:~$ ./a.out x00 x01
200
190
180
170
160
150
140
130
120
110
100
90
80
70
60
50
40
30
20
10
takk@deb9:~$

複数指定したときもちゃんと逆さまになってますので、合ってそうです。

では本物のtacを確認します。

takk@deb9:~$ tac x00 x01
100
90
80
70
60
50
40
30
20
10
200
190
180
170
160
150
140
130
120
110
takk@deb9:~$

なんと。想像と違ってました。パラメータで指定したファイルを読み込み順番からして逆さまなんですね。

FORTRANのプログラムの方も、パラメータの読み込み順序を逆にしてみます。

      CALL GETARG(I,ARGS)

を、

      CALL GETARG(N-I+1,ARGS)

とするだけですね。プログラムはこうなりました。

takk@deb9:~$ cat tac4.f
      PROGRAM cat
      CHARACTER*50 ARGS,LINE,LINES(100)
      INTEGER N,NUM
      NFLAG=0
      N = IARGC()
      NUM=1
      DO 11111 I=1,N
        CALL GETARG(N-I+1,ARGS)
        OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1),
     1  STATUS='OLD',
     2  ACCESS='SEQUENTIAL')
   10   READ(10,*,END=100) LINE
        LINES(NUM) = LINE
        NUM=NUM+1
        GOTO 10
  100   CLOSE(10,STATUS='KEEP')
11111 CONTINUE
      DO 22222 I=1,NUM-1
        WRITE(*,33333) LINES(NUM-I)
22222 CONTINUE

33333 FORMAT(A)
      STOP
      END

takk@deb9:~$

結果です。

takk@deb9:~$ gfortran tac4.f
takk@deb9:~$ ./a.out x00 x01
100
90
80
70
60
50
40
30
20
10
200
190
180
170
160
150
140
130
120
110
takk@deb9:~$

FORTRANに慣れてきたのでしょうか。プログラムの改造が早くなってきた気がします。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA