3

可変行を含む 2 列のテキスト ファイルを配列に読み込みたいだけです。テキスト ファイルの 1 列目は秒単位の時間で、2 列目は温度です。ちょうどこのような:

    1.1 10
    2.1 20
    3.2 30
    4.2 40
    5.3 50
    6.3 60
    7.4 70

以下は私が書いたコードです:

モジュール myData
    line_info と入力
        リアルタイム
        実:: 温度
    エンドタイプ

    タイプデータリンク
        type(line_info) :: time_temp
        タイプ(データリンク)、ポインタ :: 次へ
    エンドタイプ

    タイプ(line_info)、割り当て可能:: FileInfoArr(:)
エンドモジュール

プログラム Console1
    myData を使用する
    暗黙のなし

    ! 変数
    type(line_info),allocatable :: time_temp_arr(:)
    !real,allocatable :: File2Arr(:)
    文字 (len=80) :: FileFullName="C:\t.txt"       
    File2Arr(FileFullName,time_temp_arr) を呼び出す   



プログラム コンソールの終了1

サブルーチン File2Arr(FileFullName,InfoArray)
    myData を使用する
    文字 (len=80) :: FileFullName
    タイプ(line_info)、割り当て可能:: InfoArray(:)
    タイプ(データリンク)、ポインタ::ヘッド
    タイプ(データリンク)、ポインタ :: p
    整数エラー、サイズ、i


    ロジカルアライブ  
    ! ファイルが存在するかどうかを確認する
    問い合わせる (ファイル = ファイルのフルネーム、存在 = 生きている)
    もし(生きている==0)なら
        write(*,*) FileFullName, "存在しません。"
        止まる
    終了する場合

    ! ポインターを使用してファイルを読み取る   
    open(10, file=FileFullName, status="old", iostat=エラー)
    もし(エラー/=0)なら
        write(*,*) "ファイルのオープンに失敗しました!"
        止まる
    終了する場合

    割り当てる(ヘッド)
    nullify(head%next)
    p=>ヘッド
    サイズ=0
    !read(10,"(A80)") tempstr
    do while(.true.)
        read(10, fmt=*, iostat=エラー) p%time_temp
        if(エラー/=0) 終了
        サイズ=サイズ+1
        割り当て (p%next、統計 = エラー) ! 次の行を追加
        もし(エラー/=0)なら
            write(*,*) "メモリ不足です!"
            止まる
        終了する場合      
        p=>p%next
        nullify(p%next)
    終了する
    !リンク情報を配列に保存
    割り当て(InfoArray(サイズ))
    p=>ヘッド
    i=0
    do while(associated(p%next))
      i=i+1
      InfoArray(i)=p%time_temp
      p=>p%next
      !write(*,*) FileInfoArr(i)%time, FileInfoArr(i)%temp
    終了する

サブルーチン終了

コンパイルすると、次のようになりました。

エラー #8055: プロシージャには、ALLOCATABLE、ASYNCHRONOUS、OPTIONAL、POINTER、TARGET、VALUE、または VOLATILE 属性を持つ仮引数があります。必要な明示的なインターフェイスが元のソースから欠落しています。[TIME_TEMP_ARR]

このエラーを修正する方法についてのアイデア、助けてくれてありがとう。

4

2 に答える 2

3

サブルーチンFile2Arrをモジュール内に配置しますMyData(そのサブルーチン内の行を削除しますuse mydata)。それをコンパイルして実行しました。

于 2013-06-02T10:31:51.580 に答える