Fortran 文字(文字列)の連結

この記事では、Fortranでの文字列の連結に関する方法を紹介します。

Fortranで、文字や文字列を扱う時、他のコンパイル言語と同様、宣言と文字の長さを指定する必要があります。

Fortranは、characterとすることで文字、文字列として宣言できます。

宣言

文字の場合

character::string

stringは、変数名です。

これで、変数stringに文字を代入することができます。

文字列の場合

character(10)::string

stringは変数名で、10は、文字列の長さになります。

この変数stringで、10文字を超える文字列を与えてみましょう。

implicit none
character(10)::string
string="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
write(*,*)string
stop
end
ABCDEFGHIJ

というように10文字を超えた部分は、なくなってしまいます。

Zまで表示させたい場合は、文字列の長さを10ではなく、25にするか*(アスタリスク)として任意の長さとして宣言してあげましょう。

ただし、*(アスタリスク)を用いる場合、宣言では、parameterで宣言する必要があります。

character(*),parameter::string="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

parameterで定義すると、その変数は再代入出来ません。

文字の連結

空白を含まない場合

2つ以上の文字、文字列を連結する場合、/(スラッシュ)を2つ連続記述します。

implicit none
character(3)::string01
character(3)::string02
string01="ABC"
string02="DEF"
write(*,*)string01//string02
stop
end
ABCDEF

連結することができました。

空白が含まれる場合

次の場合、空白が含まれてしまいます。

implicit none
character(5)::string01
character(3)::string02
string01="ABC"
string02="DEF"
write(*,*)string01//string02
stop
end
ABC  DEF

なぜなら、宣言する際、string01は、文字列の長さを5にしているからです。

文字のないところは、空白になってしまい、連結したことで、明示的になってしまいました。

この空白をなくすことは、できるのでしょうか。もちろん、この例では文字列の長さを5から3にすればよいのですが、便利な方法があります。

それは、trim関数です。

以下のように記述することで、空白部分を削除して、連結してくれます。

implicit none
character(5)::string01
character(3)::string02
string01="ABC"
string02="DEF"
write(*,*)trim(string01)//string02
stop
end

まとめ

Fortranは、文字列を宣言する際、character(文字列の長さ)::変数名

連結する際、空白を無視したい場合、trimを用います。