前回作ったプログラムで、複数ファイル指定時の表示を確認してみます。
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に慣れてきたのでしょうか。プログラムの改造が早くなってきた気がします。


コメント