Fortran プログラムで、日本語フォルダーに保存されたファイルを開く

概要

インテル Visual Fortran コンパイラー(インテル社が提供する、Microsoft Windows OS 用の Fortran コンパイラー)の最近のバージョンにより作成された実行ファイルでは、入出力のために開こうとするファイルの絶対パスに日本語(全角文字)が含まれる場合、ファイルパスが正しく認識されずにファイルが開けない問題があります。この記事は、問題の確認方法と対応プログラムの例を示します。

注意

本記事の内容はエクセルソフトメンバーの独自研究に基づいており、開発元による正式なアナウンスではありません。あらゆる条件の下で適用可能であると確認された情報ではなく、開発元が将来リリースするバージョンにおける情報提供を保証するものでもありません。適用は、ご自身の責任において行ってください。

本記事の内容は、執筆時点での例として、以下のバージョン (参考) について適用されることを確認しています。

2019 update 3 (コンパイラーバージョン 19.0.3.203) および以降のバージョンにおいて、本記事の例によるエラーは確認されていません。ただし、引き続き類似した問題が発生する場合は、本記事における対応例をお試しください。

  • 2019 update 2 (コンパイラーバージョン 19.0.2.190) [2019年03月13日 追記]
  • 2018 update 1 (コンパイラーバージョン 18.0.1.156) [2017年12月22日 追記]
  • 2017 update 5 (コンパイラーバージョン 17.0.5.267) [2017年12月22日 追記]
  • 2017 update 4 (コンパイラーバージョン 17.0.4.210)
  • 2017 Initial release (コンパイラーバージョン 17.0.0.109)
  • 2016 update 4 (コンパイラーバージョン 16.0.4.246)
  • 2015 update 7 (コンパイラーバージョン 15.0.7.287)
  • 2015 update 6 (コンパイラーバージョン 15.0.6.285)
  • 2015 update 5 (コンパイラーバージョン 15.0.5.280)

本記事で説明する問題は、最新バージョン (執筆時点:2017 update 4) においても発生することが開発元へ報告されました。

インテル oneAPI ツールキットの公開 (2020年12月) 以降、開発元の方針によりコンパイラーの「日本語版」対応は終了しました。一般に日本語環境でも同様に動作しますが、言語環境ごとに特有の事象について検証は実施されていません。

ページの先頭へ戻る

説明

通常、Fortran プログラムから単純にファイル(例として output.txt )を開く場合には、作業フォルダー(例として C:\fileopen\研究\ )と同じ場所にある C:\fileopen\研究\output.txt ファイルが開かれます。
しかし、インテル Visual Fortran コンパイラー の最近のバージョンにより作成された実行ファイルでは、ファイルパスに全角文字を含む場合に正しく認識されず、 C:\fileopen\ v\output.txt を開く、と処理されます。これは実際のパスとは異なるため、実行時にエラーが発生します。

この動作を回避し、日本語(全角文字)を含むパスにあるファイルを扱うには、ファイルを開く手続きにおいて、明示的に絶対パス(フルパス)を用います。

コード例




インテル Visual Fortran コンパイラーに含まれる移植ルーチン(ifport)より FULLPATHQQ 関数を用いると、ファイル名と現在の作業フォルダーから正確な絶対パスを取得できます。
暗黙的に装置番号と紐づけられたファイル(fort.N)を利用している場合には、明示的に OPEN 文により開くようにするか、実際に入出力を行う前に、環境変数 FORTN をプログラム内から指定します。環境変数をプログラム内から指定するには、同様に移植ルーチン(ifport)より SETENVQQ 関数を用います。

ページの先頭へ戻る

事例1:OPEN 文で明示的にファイルを開く

以下に、この記事で取り扱う問題の確認と対応例として、インテル Visual Fortran コンパイラーがインストールされている Windows OS 上の、コマンドプロンプトでの操作を示します。

ディレクトリ構成(コマンドプロンプト)

テスト用ソースコードおよびプログラムのコンパイル

このプログラムは、作業フォルダーにある output.txt ファイルを開き、文字列 Hello Fortran を書き込みます。


半角英数字のみのフォルダー内で実行

全角文字を含むフォルダー内で実行(エラーが発生する)

対処後のソースコード(FULLPATHQQ 関数により取得した絶対パスでファイルを開く)

コンパイルおよび実行


ページの先頭へ戻る

事例2:装置番号に紐づけられたファイルを用いる

以下に、この記事で取り扱う問題の確認と対応例として、インテル Visual Fortran コンパイラーがインストールされている Windows OS 上の、コマンドプロンプトでの操作を示します。

ディレクトリ構成(コマンドプロンプト)

テスト用ソースコードおよびプログラムのコンパイル

このプログラムは、作業フォルダーにある fort.20 ファイル( OPEN 文でファイル名を指定しない場合の規定値)から数値を読み取り表示します。


実行(実際にファイルが無いためエラー)

半角英数字のみのフォルダー内で実行

全角文字を含むフォルダー内で実行(エラーが発生する)

対処後のソースコード( SETENVQQ 関数で環境変数 FORT20 を設定)

インテル Visual Fortran コンパイラーに依存する処理は、CONTAINS 文以降に定義されているサブルーチン jppath_workaround() の中に集約されています。

コンパイルおよび実行



上述したソースコード read-fullpath.f90 での対処は、事前に環境変数 FORT20 を設定することで指定のパスにあるファイルを開く場合にも対応しています。


コマンドプロンプト上で設定した環境変数は、コマンドプロンプトを閉じるか、以下のように設定値無しとすることで解除されます。

ページの先頭へ戻る

まとめ

本記事では、インテル Visual Fortran コンパイラーを使用した Fortran プログラムで、日本語フォルダーに保存されたファイルを開く際に起こる問題と、対応方法について説明しました。Windows OS において Fortran プログラム中でファイルを開く場合には、絶対パス(フルパス)でファイル名を指定すると、期待通り動作しました。

ページの先頭へ戻る