この記事では、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を用います。