1. 導入:なぜDELIM指定子が重要なのか
数値計算の結果をファイルに出力し、それをExcelやPythonなどの他ツールで分析することは日常的な作業です。しかし、Fortranで単純にファイル出力を行うと、文字列の中にカンマや空白が含まれている場合、Excel側で正しく列として認識されないことがあります。この課題を解決し、データを「他ソフトで読み込める形式」に整形するために不可欠なのが、OPEN文で指定できる「DELIM指定子」です。
2. 基礎知識:DELIM指定子とは?
Fortranにおける「リスト指向出力(リスト形式の出力)」や「NAMELIST出力」では、デフォルトだと文字列を囲む引用符が省略されることがあります。
DELIM指定子を使うことで、文字列の前後を引用符(’)や二重引用符(”)で囲むよう強制できます。これにより、データの区切り(カンマなど)と文字列内の文字が混同されるのを防ぎ、CSVファイルとしての信頼性を高めることができます。
指定できる値には主に以下があります。
・’NONE’:引用符で囲まない(デフォルト)。
・’QUOTE’:二重引用符(”)で囲む。
・’APOSTROPHE’:単一引用符(’)で囲む。
3. 実装・解決策
実務でCSVファイルを作成する際は、DELIM=’QUOTE’を指定するのが一般的です。Excelは二重引用符で囲まれたデータを一つのセルとして正しく認識するため、文字列中にカンマが含まれていてもレイアウトが崩れません。OPEN文の引数にこの指定子を追加するだけで、出力データの互換性が劇的に向上します。
4. サンプルプログラム
以下のコードは、CSV形式のデータをファイル出力する例です。そのままコンパイルして動作を確認してみてください。
program output_test
implicit none
integer :: file_unit
character(len=20) :: name
real :: value
! テスト用データ
name = “Data, A” ! カンマを含む文字列
value = 123.45
! ファイルを開く際にDELIMを指定する
! ‘QUOTE’を指定することで、文字列が”で囲まれるようになります
open(newunit=file_unit, file=’output.csv’, status=’replace’, delim=’quote’)
! ファイルへの書き出し
write(file_unit, ) name, “,”, value
close(file_unit)
print , “ファイル output.csv を生成しました。”
end program output_test
5. 応用・注意点
注意点1:リスト指向出力との組み合わせ
DELIM指定子は、WRITE文でアスタリスク()を使った「リスト指向出力」に対して機能します。FORMAT文でフォーマットを細かく指定している場合は効果がないため、CSVのような単純な形式にはリスト指向出力を使うのがコツです。
注意点2:Excelとの相性
Excelにインポートする際は、UTF-8で保存したファイルを読み込むと文字化けすることがあります。日本語を含む場合は、Shift-JISで出力するか、Excel側のインポート設定で文字コードを合わせるようにしてください。
現場のヒント:
NAMELIST形式で設定ファイルを出力する際も、DELIM=’QUOTE’を指定しておくと、設定値の読み込みエラーを大幅に減らすことができます。機械可読性を高めるために、ぜひ活用してください。

コメント