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