FORTRAN(cutコマンドを作る)

FORTRAN、次はcutコマンド作ります。
まずcutをかけるファイルをseqコマンドで作っておきます。

takk@deb9:~$ seq 10010 100 13000 | split -dl10
takk@deb9:~$ ls
x00  x01  x02
takk@deb9:~$ cat x00
10010
10110
10210
10310
10410
10510
10610
10710
10810
10910
takk@deb9:~$ cat x02
12010
12110
12210
12310
12410
12510
12610
12710
12810
12910
takk@deb9:~$

生成したファイルx00にcutコマンドを使ってみます。

takk@deb9:~$ cut -b1-3 x00
100
101
102
103
104
105
106
107
108
109
takk@deb9:~$

1Byte目から3Byte目の文字列を抽出しました。

ではFORTRANで作ってみようと思いますが、いきなりオプション解析するのは難しそうなので、固定で2Byte目から4Byte目を抽出するだけのプログラムから始めます。
このようになりました。

takk@deb9:~$ cat cut1.f
      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')
   10   READ(10,*,END=100) LINE
        CALL CUT(LINE)
        GOTO 10
  100 CLOSE(10,STATUS='KEEP')
11111 CONTINUE
      STOP
      END

      SUBROUTINE CUT(LINE)
        CHARACTER*100 LINE
 1111   WRITE(*,33333) LINE(2:4)
        RETURN
33333   FORMAT(A)
      END

takk@deb9:~$

実行してみます。

takk@deb9:~$ gfortran cut1.f
takk@deb9:~$ ./a.out x00
001
011
021
031
041
051
061
071
081
091
takk@deb9:~$

元のファイルの内容を横に並べて確認します。2Byte~4Byteの位置の文字列と一致しますね。

takk@deb9:~$ !! | paste - x00
./a.out x00 | paste - x00
001     10010
011     10110
021     10210
031     10310
041     10410
051     10510
061     10610
071     10710
081     10810
091     10910
takk@deb9:~$

Leave a Reply

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

CAPTCHA