2016-05-25 8 views
1

次のモジュールを同僚から取得しました。私は派生データ型のデータを返すプログラムを作成しようとしています。私は、派生したデータ型に関する経験はありません。プログラムのTABLE(ファイルの終わり)を試しましたが、何も取得できませんでした。どのようにして派生データ型を印刷または書き出すことができますか?ネストされた派生データ型の印刷/書き込み

C======================================================================= 
    MODULE mod_AsosCommDates 
    C======================================================================= 

    IMPLICIT NONE 

    INTEGER, PARAMETER :: NCommDates=2 

    TYPE ASOSData 
     CHARACTER (LEN=40) :: City 
     CHARACTER (Len=60) :: Location 
     CHARACTER (LEN=2) :: State 
     INTEGER   :: IWBAN 
     CHARACTER (LEN=4) :: INTCALL 
     CHARACTER (LEN=3) :: USACALL 
     REAL    :: DDLAT 
     REAL    :: DDLON 
     CHARACTER (LEN=8) :: COMMISDATE 
     CHARACTER (LEN=3) :: PUB 
     CHARACTER (LEN=3) :: SITETYPE 
     REAL    :: ANEM_FEET 
     REAL    :: ANEM_METERS 
    END TYPE ASOSData 

    TYPE (ASOSDATA), DIMENSION(NCommDates) :: ASOSCommDates 

    CONTAINS 

    SUBROUTINE InitAsosCommInfo (ASOSCommDates) 

    TYPE (ASOSDATA), DIMENSION(NCommDates) :: ASOSCommDates 

    ASOSCommDates(1) = ASOSDATA("ANCHORAGE","LAKE HOOD SEAPLANE BASE", 
& "AK",26491,"PALH","LHD",61.17,-149.96,"19980122","NO","FAA", 
& 33.00,10.05) 
    ASOSCommDates(2) = ASOSDATA("ANCHORAGE","MERRILL FIELD AIRPORT", 
& "AK",26409,"PAMR","MRI",61.21,-149.85,"19971015","NO","FAA", 
& 16.00,4.87) 

     END SUBROUTINE InitAsosCommInfo 

    END MODULE mod_AsosCommDates 

    PROGRAM TABLE 
    USE mod_AsosCommDates 
    CALL InitAsosCommInfo(ASOSCommDates) 
    PRINT *,ASOSCommDates(1)%ASOSData%City 
    END PROGRAM TABLE 

投稿EST 10:54で2016年5月25日を編集し、もともと投稿 例は、この記事の質問に関連したものと異なるエラーが発生しました。 NCommDates=2 CALLラインにNCommDates=886から変更

NCommDatesは、コンパイル時にCALL InitAsosCommInfo(ASOSCommDates)

エラーへCALL InitAsosCommInfoから変更されている:

$ gfortran 2.for 
2.for:48.39: 

     PRINT *,ASOSCommDates(1)%ASOSData%City 
        1 Error: 'asosdata' at (1) is not a member of the 'asosdata' structure 
+0

実際にあなたが何も得ていないのは本当に奇妙です。実際にコンパイル時のエラーメッセージが表示されています。 「何もない」とはどういう意味ですか? –

+0

コンパイルの問題は、CALL文が正しくないためです。当初は 'CALL InitAsosCommInfo'でした。 'InitAsosCommInfo(ASOSCommDates)'を呼び出すように編集されました。しかし、私の最初の質問は、Alexander Vogtのコメントによって答えられました。 – rjss

+1

あなたの投稿に常にエラーメッセージを含める必要があります。とにかく、 'PRINT *、ASOSCommDates(1)'も試みてください。 –

答えて

2

Fortranの標準は、あなたが私のためにタイプが結合した手順を記述できるように指定しますが/多くのコンパイラはこれをまだサポートしていません。したがって、最も簡単な解決策は、派生型をコンポーネントごとに出力することです。 ...と同様に、他のコンポーネントのための

PRINT *,ASOSCommDates(1)%City 

しかし、あなたのコード内のコンポーネントにアクセスタイプを指定する必要はありません。

+2

派生型には、プライベート、ポインタまたは割り当て可能なコンポーネントは含まれていないため、入力または出力リストでは、その型のオブジェクトがそのコンポーネントのリストに自動的に展開されます。 – IanH

関連する問題