FORTRAN(echoコマンドを作る)

FORTRANです。echoコマンド作ります。いつものようにオプション無です。

echoコマンドは、パラメータで渡した文字列を表示するコマンドなので、パラメータ数分の文字列表示を繰り返せばできあがります。

takk@deb9:~$ cat echo1.f
      PROGRAM echo
      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:~$

IARGC()でパラメータ数を取得して、DO文で回すだけです。
実行してみます。

takk@deb9:~$ gfortran echo1.f
takk@deb9:~$ ./a.out aaa bbb ccc
 aaa
 bbb
 ccc
takk@deb9:~$

だめですね。echoコマンドと表示が異なります。
本物のechoはこのような表示です。

takk@deb9:~$ echo aaa bbb ccc
aaa bbb ccc
takk@deb9:~$

FORMATを指定して表示するように変更してみましょう。

takk@deb9:~$ cat echo2.f
      PROGRAM echo
      CHARACTER*100 ARGS
      INTEGER N
      N = IARGC()
      DO 11111 I=1,N
        CALL GETARG(I,ARGS)
        WRITE(*,22222) ARGS(1:INDEX(ARGS,' ')-1)
11111 CONTINUE
22222 FORMAT(A)
      STOP
      END
takk@deb9:~$

しかしこれでも、改行は取り除くことができないようです。

takk@deb9:~$ gfortran echo2.f
takk@deb9:~$ ./a.out aaa bbb ccc
aaa
bbb
ccc
takk@deb9:~$

いろいろ調べてみると、FORMAT指定に$を書けば、改行なし扱いとなることが分かりました。

takk@deb9:~$ cat echo3.f
      PROGRAM echo
      CHARACTER*100 ARGS
      INTEGER N
      N = IARGC()
      DO 11111 I=1,N
        CALL GETARG(I,ARGS)
        WRITE(*,22222) ARGS(1:INDEX(ARGS,' ')-1)
11111 CONTINUE
22222 FORMAT(A$)
      STOP
      END
takk@deb9:~$

しかしビルドするとこんなエラーが。

takk@deb9:~$ gfortran echo3.f
echo3.f:9:14:

 22222 FORMAT(A$)
              1
Fatal Error: Invalid character ‘$’ at (1). Use ‘-fdollar-ok’ to allow it as an extension
compilation terminated.
takk@deb9:~$

オプションを使えと言われてるので、仕方なく-fdollar-okオプションを使うことにします。

takk@deb9:~$ gfortran echo3.f -fdollar-ok
takk@deb9:~$ ./a.out aaa bbb ccc
aaabbbccctakk@deb9:~$

惜しいです。後はパラメータ毎に空白を表示するのと、最後だけ改行を表示すればよいですね。
続く。

Leave a Reply

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

CAPTCHA