2

私はFortran77で作業する資格がまったくないということで質問の前に述べさせていただきますが、残念ながら、私はここにいて、何ができるかを学んでいます。

私はさまざまな条件下での火炎特性のモデリングを含むプロジェクトに取り組んでいます。ここに、テーブルの最初の行を出力し、適切な列の下の行にラベルを付けるスニペットがあります。(KSYMは、存在するさまざまな化合物にラベルを付ける文字列の配列です)

   WRITE(LOUT,1) "Standoff(cm)", "Density(g/cm3)", 
 +  "HeatReleaseRate(erg/cm3/s)","Temperature(K)",
 +  KSYM(1),KSYM(2),KSYM(3),KSYM(4),KSYM(5),KSYM(6),KSYM(7),
 +  KSYM(8),KSYM(9),KSYM(10),KSYM(11),KSYM(12),KSYM(13),KSYM(14),
 +  KSYM(15),KSYM(16),KSYM(17),KSYM(18),KSYM(19),KSYM(20),
 +  KSYM(21),KSYM(22),KSYM(23),KSYM(24),KSYM(25),KSYM(26),
 +  KSYM(27),KSYM(28),KSYM(29),KSYM(30),KSYM(31),KSYM(32),
 +  KSYM(33)

その後、各スタンドオフ間隔のループで

    WRITE(LOUT,6) X(J),F(J),HR(J),(SN(N,J), N=1,NATJ-1)

そして、これがフォーマットです:

 1     FORMAT(A16,3X,A16,3X,A30,3X,A16,3X,80(A16,3X))
 2     FORMAT(I10)
 3     FORMAT(3(I10,3X))
 4     FORMAT(3(E17.7,3X))
 5     FORMAT(80(E17.7,3X))
 6     FORMAT(F17.7,3X,F17.7,3X,F20.7,3X,80(E15.5,3X))

私の問題は、最初の行のラベルとその適切な列が最初の数列の後に整列されないためにデータが出力され、読み取りと操作が困難になることです。

私が考えることができる2つの可能な解決策:1。「T」形式記述子を使用して絶対列を作成する2.即時可読性の問題を無視し、すべてのエントリの後にコンマまたはセミコンマを挿入して、Excelで.として開きます。 CSVファイル

最終的にデータをグラフ化することになっているので、オプション2を実行することもできます。最初のコードスニペットの各エントリの間に「、」を追加しようとしましたが、構文エラーが発生し続けたため、 m私が何か間違ったことをしていると仮定します。

編集:

アイデア2をテストするために、各エントリの間に「、」を追加しました。

       WRITE(LOUT,*) 'Name',KSYM(1),';',KSYM(2),';',KSYM(3),';',
 +  KSYM(4),';',KSYM(5),';',KSYM(6),';',KSYM(7),';',KSYM(8),';',
 +  KSYM(9),';',KSYM(10),';',KSYM(11),';',KSYM(12),';',
 +  KSYM(13),';',KSYM(14),';',KSYM(15),';',KSYM(16),';',
 +  KSYM(17),';',KSYM(18),';',KSYM(19),';',KSYM(20),';',
 +  KSYM(21),';',KSYM(22),';',KSYM(23),';',KSYM(24),';',
 +  KSYM(25),';',KSYM(26),';',KSYM(27),';',KSYM(28),';',
 +  KSYM(29),';',KSYM(30),';',KSYM(31),';',KSYM(32),';',
 +  KSYM(33)

しかし、以前と同じ構文エラー。何か違いがあれば、私は独特のコンパイラpgf77を使用しています。

4

2 に答える 2

1

基本的な問題は、フォーマット1と6のフィールド幅が異なることです。フォーマット1では、3Xの間隔と長さ16の文字列(ラベル)があります。1つを除いてA30です。フォーマット6では、値に3のスペースがあり、17、20、15などのさまざまな長さの数値アイテムのフィールドがあります。3番目のアイテムを除くすべての数値フォーマットアイテムを16の長さにすると、次のようになります。整列する必要があります。

最初の書き込みは、配列の33個の個別にインデックス付けされた値を暗黙のdo-loop(ksym(i)、i = 1,33)に置き換えることで、はるかに読みやすくなります。すべてを書き出す代わりに、配列機能を使用することもできます。

于 2011-04-25T21:08:06.333 に答える
0

フォーマットステートメントは、CSVなどの可変幅出力とはほとんど互換性がありません。代わりに、リスト指向の出力を使用してください。

    write (LOUT,*) 'Standoff(cm), Density(g/cm3), HeatReleaseRate(erg/cm3/s), Temperature(K)'

    do 101 i=1,n
    write (LOUT,*) X(J), ',', F(J), ',', HR(J), ',', (SN(N,J), ',', N=1,NATJ-1)
101 continue

(未テスト)

于 2011-04-25T19:49:35.080 に答える