Fortranでオブジェクト指向(5)
本日のポイント
可変長文字列の定義と使い方
今日もオブジェクト指向からは外れますが文字列の処理のうち
可変長文字列について紹介します。まずはサンプルプログラムを
サンプルプログラム
program varChar
implicit none
character(:), allocatable :: res
character(100) buff
read(5,*) buff
res(:) = trim(adjustl(buff))
write(6, *) "Valid input characters are ", res
write(6, *) "Valid input length is ", len(res)
stop
end
可変長文字列の定義
character(:), allocatable :: res
で定義します。character, allocatable :: res(:)としてもコンパイル成功
しますし動作もしますが意図したものとは異なる(但しプログラム上正しい)
動作をします。試してみてください。
trim(adjustl([文字列]))
trimで文字列の前のスペースを、adjustlで後ろのスペースを削除します。
Fortranの文字列処理実装仕様に関して思うこと
FORTRAN時代でも character(10) a と character a(10)の違いが
プログラム内部での記述で明確でない点が前々から気になっていました。
どちらを定義しても例えばb = a(1:5)のような書き方が可能なので
双方の違いがFORTRAN'erおよびFortran'erには意識されにくいのですね。
上のサンプルプログラムの定義の違いによる動作の違いも
本質的にはこの二つの定義の違いに起因します。
それでは、今日はこの辺で。