2010-12-28 153 views
7

私はfortranで単純な出力を書いていますが、空白区切り文字が必要です。ただし、次の文で、使用している場合:Fortranで数値出力を左揃えにするにはどうすればよいですか?

format(A20,ES18.8,A12,ES18.8) 

を私はこのような出力が得られます。

p001t0000    3.49141273E+01obsgp_oden  1.00000000E+00 

が、私はこれを好む:

p001t0000   3.49141273E+01 obsgp_oden 1.00000000E+00 

が、私はのように(幅に対して負の値を使用してみましたPython)でもサイコロはありません。では、数値を左揃えにする方法はありますか?

事前に感謝します。

答えて

7

特に美しい方法はありません。しかし、内部のWRITE文を使用して数値をテキスト文字列に変換し(以前はENCODE文で行っていました)、テキストを操作することで必要な処理を行うことができます。引用

http://rsusu1.rnd.runnet.ru/develop/fortran/prof77/node168.html

内部ファイルの書き込みは、典型的には、例えば、適切な フォーマット仕様を使用して 文字列に数値を変換するために使用 ある:

CHARACTER*8 CVAL 
    RVALUE = 98.6 
    WRITE(CVAL, '(SP, F7.2)') RVALUE 

WRITEステートメントは 文字変数CVALを 文字「+98.60」で埋めます(数値 の両端の空白は1つで、 の数字は7 文字の右桁数になります。 のレコードは、 の長さが8文字に埋められているため、2番目の数字は右詰めです。

数は、それがさまざまな方法で さらに処理することができ 文字列に変換された後は、数字で左寄せ を書くために、例えば 、これは、それを可能にするセクション7に を説明しましたフィールド、...

+0

私はもっとエレガントなものを望んでいましたが、同様の解決策に乗っているようでした。答えてくれてありがとう@ubuntourist – mishaF

3

これはFortran 95では簡単ですが、それでも簡単ではありません。数字やその他の項目をwrite文で文字列に書き込みます(最初の答えと同様)。その後、Fortran 95の組み込み "ADJUSTL"を使用して、文字列の空白以外の文字を左に調整します。

1

空白を残すために左寄せの数字ではなく、出力フィールドの間に空白を入れたい場合は、単にX編集記述子を使用します。たとえば、

format(A20,4X,ES18.8,4X,A12,4X,ES18.8) 

は、各フィールドと次のフィールドの間に4つのスペースを挿入します。標準では1つのスペースには1Xが必要であることに注意してください。現在のコンパイラの中には、非標準のXも受け入れているものがあります。

2

単純なFortran書式(LJではない)を書いた後、私はExcel(csv)とultraeditの組み合わせを使ってスペースを削除しています効果的に目的のLJを直接コンマ(これは私の特定のインポートフォーマットを別のソフトウェアに必要とする)に続けて取得します。 BF