私はまだ答えを見つけていない非常に単純な問題を抱えています。
Fortran で既に初期化されている文字に文字 (特に空白) を追加する方法はありますか?
どうやら
CHARACTER(2000) :: result
result = ''
result = result // ' '
動作しません。
すべての文字列は、スペース以外の最後の文字の後に末尾の空白 (スペース文字) で埋められることに注意してください。これはとても重要です!
'a' // ' ' really produces 'a '
しかし
result = result // ' '
result
は 2001 文字の文字列を生成し (末尾の空白を含めて2000 文字全体に追加します)、割り当て時に切り捨てられるため、最終的result
には同じになります。
あなたが望むかもしれません
result = trim(result) // ' '
とにかく、文字列が末尾の空白 (スペース) で埋められるため、これも役に立ちません。
空白以外のものを追加すると意味があります。
character(4) :: str
str = "a"
str = trim(str) // "bcd"
print *, str
end
印刷する必要がありますabcd
。
変数を大きくしたい場合は、次を使用する必要があります。
character(:), allocatable:: result
result = 'a' !now contains 'a' and has length 1
result = result // 'b' !now contains 'ab' and has length 2
スペース文字でも機能します。
character(:), allocatable:: result
result = ' ' !now contains ' ' and has length 1
result = result // ' ' !now contains ' ' and has length 2
(インテル Fortran の古いバージョンでは、この動作のために代入時に再割り当てを有効にする必要がありました。)