まだまだ続くFORTRANです。
echoコマンドでパラメータで指定した複数の文字列を表示することができましたので、catコマンドも作れそうな気がします。今回はcatコマンドです。
まずcatコマンドのパラメータに指定するファイルは以下のコマンドで生成しておきます。
takk@deb9:~$ seq 10 10 300 | split -dl10 takk@deb9:~$ ls cat0.f x00 x01 x02 takk@deb9:~$
xから始まるファイルにそれぞれ10~300までの数字が10毎に格納されています。
takk@deb9:~$ head x* ==> x00 <== 10 20 30 40 50 60 70 80 90 100 ==> x01 <== 110 120 130 140 150 160 170 180 190 200 ==> x02 <== 210 220 230 240 250 260 270 280 290 300 takk@deb9:~$
catコマンドは連結されて表示されますので、x00~x02をパラメータに指定するとこのような表示になります。
takk@deb9:~$ cat x00 x01 x02 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 takk@deb9:~$
takk@deb9:~$ cat -n x00 x01 x02 1 10 2 20 3 30 (省略) 28 280 29 290 30 300 takk@deb9:~$
指定したファイル名を表示するところから始めます。
takk@deb9:~$ cat cat1.f PROGRAM cat CHARACTER*100 ARGS INTEGER N N = IARGC() DO 11111 I=1,N CALL GETARG(I,ARGS) WRITE(*,*) ARGS(1:INDEX(ARGS,' ')-1) 11111 CONTINUE STOP END takk@deb9:~$
実行するとこのようになります。
takk@deb9:~$ gfortran cat1.f takk@deb9:~$ ./a.out x00 x01 x02 x00 x01 x02 takk@deb9:~$
次は一行目だけ読み出して表示するプログラムに修正します。
takk@deb9:~/gf$ cat cat2.f PROGRAM cat CHARACTER*100 ARGS,LINE INTEGER N N = IARGC() DO 11111 I=1,N CALL GETARG(I,ARGS) OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1), 1 STATUS='OLD', 2 ACCESS='SEQUENTIAL') READ(10,*) LINE WRITE(*,*) LINE CLOSE(10) 11111 CONTINUE STOP END takk@deb9:~$
実行結果です。
takk@deb9:~$ gfortran cat2.f takk@deb9:~$ ./a.out x00 x01 x02 10 110 210 takk@deb9:~$
続きます。
コメント