1. 導入:なぜ文字列の「空白」が問題になるのか?
Fortranを学び始めた方が最初に出くわす壁の一つが、文字列の扱いです。Fortranの文字列(CHARACTER型)は、あらかじめ決めた長さでメモリを確保する「固定長」という性質を持っています。例えば「name = ‘Data’」と書くと、実際のデータは「Data」でも、メモリ上には後ろに大量の空白が埋め込まれた状態になります。この「見えない空白」が原因で、ファイルを開こうとしたり、文字列を結合したりする際に意図しないエラーが発生することがあります。本記事では、この課題をスマートに解決する「LEN_TRIM」関数の使い方を解説します。
2. 基礎知識:固定長とトリミング
Fortranでは、CHARACTER(LEN=20) :: filename と宣言すると、変数filenameは常に20文字分として扱われます。もし「test.txt」という名前を代入すると、残りの12文字分は自動的に空白になります。
ここで登場するのが「LEN_TRIM」関数です。この関数は、文字列の末尾にある空白を除いた「有効な文字数」を整数として返してくれます。これを使うことで、プログラムは「空白を除いた本来のファイル名」を正しく認識できるようになります。
3. 実装:TRIM関数と組み合わせる
LEN_TRIM関数はそれ単体で使うよりも、TRIM関数とセットで覚えるのが一般的です。TRIM関数は、文字列から末尾の空白を取り除いた新しい文字列を返します。ファイル操作や出力処理を行う際、このTRIM関数を使うことで、固定長による余計な空白を排除したクリーンな文字列を扱うことができます。
4. サンプルプログラム
以下のコードをコピーして、実際にコンパイルして動作を確認してみてください。
program string_example
implicit none
character(len=20) :: filename = “data_file.txt”
integer :: valid_length
! LEN_TRIMを使って有効な文字数を取得します
valid_length = len_trim(filename)
print , “元の文字列の長さ(固定長):”, len(filename)
print , “有効な文字数(LEN_TRIMの結果):”, valid_length
! TRIM関数を使って空白を除去してファイルを開く例
! trim()を使うことで、ファイル名末尾の空白を無視して処理されます
open(unit=10, file=trim(filename), status=’unknown’)
print , “ファイルを開く際にTRIM関数を使用しました。”
close(10)
end program string_example
5. 応用・注意点:現場で陥りやすいバグ
実務で特に注意すべきなのは「文字列の結合」です。例えば、ディレクトリ名とファイル名を結合する際に、固定長の空白が残ったままだと、パスが壊れてしまい「ファイルが見つかりません」というエラーになります。
また、LEN_TRIMは「文字列の末尾」の空白のみを対象とします。文字列の「中間」にある空白は削除されないため、もし入力データに余計なスペースが含まれる可能性がある場合は、入力段階でサニタイズ(掃除)する処理を検討してください。初心者の方は、まず「ファイル操作やパス指定の際には必ずTRIMを挟む」という癖をつけておくと、多くのトラブルを未然に防ぐことができます。

コメント