FORTRAN(文字列その2)


アニメ『王様ゲーム The Animation』

ハッピーエンドなら最後まで見ようと思うんですが、怖くて視聴が進みません。面白いんですけど。

さてFORTRANです。なんとFORTRAN77にも、文字列スライスがありました。

こんな風に使います。

文字列変数(最初:最後)

takk@deb9:~$ cat slice1.f
      PROGRAM MAIN
      CHARACTER*11 S
      S='ABCDE FGHIJ'
      WRITE(*,11111) S(1:5)
11111 FORMAT(A10)
      STOP
      END
takk@deb9:~$ gfortran slice1.f
takk@deb9:~$ ./a.out
     ABCDE
takk@deb9:~$

感動です。Pythonのスライスで感動を覚えたときもありましたが、FORTRAN77の時代からあったとは。やはり考古学は大事です。

:(コロン)から右を省略すると最大値が指定されます。

takk@deb9:~$ cat slice2.f
      PROGRAM MAIN
      CHARACTER*11 S
      S='ABCDE FGHIJ'
      WRITE(*,11111) S(7:)
11111 FORMAT(A10)
      STOP
      END
takk@deb9:~$ gfortran slice2.f
takk@deb9:~$ ./a.out
     FGHIJ
takk@deb9:~$

:(コロン)から左を省略すると最小値の指定となります。

takk@deb9:~$ cat slice3.f
      PROGRAM MAIN
      CHARACTER*11 S
      S='ABCDE FGHIJ'
      WRITE(*,11111) S(:5)
11111 FORMAT(A10)
      STOP
      END
takk@deb9:~$ gfortran slice3.f
takk@deb9:~$ ./a.out
     ABCDE
takk@deb9:~$

置換もできます。こんなことまでできるんですね。

takk@deb9:~$ cat slice4.f
      PROGRAM MAIN
      CHARACTER*11 S
      S='ABCDE FGHIJ'
      S(4:7)='4567'
      WRITE(*,11111) S
11111 FORMAT(A10)
      STOP
      END
takk@deb9:~$ gfortran slice4.f
takk@deb9:~$ ./a.out
ABC4567GHI
takk@deb9:~$

しかし置換する文字列の個数が合わないと、このように結果がおかしくなります。

takk@deb9:~$ cat slice5.f
      PROGRAM MAIN
      CHARACTER*11 S
      S='ABCDE FGHIJ'
      S(4:7)='12'
      WRITE(*,11111) S
11111 FORMAT(A10)
      STOP
      END
takk@deb9:~$ gfortran slice5.f
takk@deb9:~$ ./a.out
ABC12  GHI
takk@deb9:~$

Leave a Reply

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

CAPTCHA