1

次のような整数レコードを含む入力テキストファイルがあります。

1

これは、Fortranコードでは次のように読み取られます。

read(iunit,'(i4)') int_var

これはGfortranで正常に機能しますが、PGI Fortranコンパイラでコンパイルされた同じコードは4文字幅のフィールド(実際のレコードは1文字)を想定しており、エラーをスローします。これで、フォーマットが幅を指定し、これがFortran標準に従って正しい動作である場合とそうでない場合があることがわかりましたが、私の質問は、この点でGfortranのように動作するPGIのコンパイラオプションはありますか?

私が使用しているこのサードパーティのコードには、このような読み取りステートメントがたくさんあり(数百または数千)、入力データには「間違った」幅のレコードがたくさんあるため、コードまたは入力データの両方を変更するにはかなりの労力が必要になります。

4

2 に答える 2

2

これはに関連しているとは思いませんblankreadでファイルiunitを開かない限り、これによってエラーが発生することはありませんpad="no"。デフォルトはallwayspad="yes"です。これにより、入力レコードが短すぎる場合、入力レコードにブランクが埋め込まれます。

正しい入力ファイルを使用し、行末が正しいことを確認しますか?Windowsで発生したテキストファイルに問題がある可能性があり、UnixではCRが入力レコードで読み取られる可能性があります。この場合、unix2dosユーティリティを使用すると役立つ場合があります。これをテストするために、編集記述子をcharacter(4)使用して文字列を読み取ろうとする場合があります。a4

于 2012-11-16T20:23:15.057 に答える
0

PGIFortranはopenキーワードblank="null"をサポートしていますか?これにより、読み取りが目的の動作に変更され、コードへの変更が最小限に抑えられると思います。blank="null"とblank="zero"は、gfortran4.7では違いがないようです。

于 2012-11-16T19:14:08.783 に答える