FORTRAN(catコマンドを作る)

まだまだ続く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:~$

続きます。

Leave a Reply

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

CAPTCHA