株式会社 科学技術研究所
ホーム > かぎけんブログ > 藤田明希 > Fortranでオブジェクト指向 > Fortranでオブジェクト指向(6)
Fortranでオブジェクト指向(6)
投稿日:2017/03/21
カテゴリ:Fortranでオブジェクト指向

本日のポイント

文字列型変数と数値型変数の相互変換

本日もオブジェクト指向からは外れますが、
Fortranでの文字列型変数と数値型変数の相互変換について紹介します。

文字列型→数値型
文字列型を数値型に変換する場合はread文を使用します。
例えば3つの数値がコンマ区切りで文字列型に保存されている場合は
次のようにします。

character(100) :: chrNums = "1.0d0, 2.0d0, 3.0d0"
double precision x, y, z
read(chrNum, *) x, y, z

この例では区切り文字を,(コンマ)にしていますが、スペースでも
同様の動作をします。但しどの文字を区切り文字として認識するか
は処理系やコンパイラによって異なる場合があるので注意が必要です。

上記の例は倍精度実数型に代入していますが、整数型の場合も
自動的に型変換して変数に代入されます。
但しCやC++のライブラリとの連携が含まれる場合で文字列型に
NULL文字(Fortranのchar(0))が含まれる場合はエラーになるので明示的に

if(index(chrNum, char(0).ge.1)then
  chrNums = chrNums(1, index(chrNum, char(0))-1)
endif

などで明示的にNULL文字を回避する必要があります。

数値型→文字列型
character(100) :: chrNums
double precision :: x = 1.0d0
double precision :: y = 2.0d0
double precision :: z = 3.0d0
write(chrNum, '(3(d11.3,1x))') x, y, z
のようにするとchrNumには
0.100D+01 0.200D+01 0.300D+01
の文字列が代入されます。

Fortranの文字列⇔数値処理は動作が安定しているので安心して
使うことが出来ますが、エラーが発生すると処理が止まってしまうので
read、 writeにerr=句を追加してエラーが発生した時の回避処理を
加えるのが万全です。

今回はこのへんで。