2012-01-06 15 views
1

未定義の数のセルを含み、各セルに対して未知数のデータ対を含むファイルを読む必要があります。私はFortranを使用しています。FORTRANで未知の構造のデータファイルを読むには?

ファイルは、以下のようになります。

Cell Number 1 
Depth1 Volume1 
Depth2 Volume2 
Depth3 Volume3 
. 
. 
. 
Cell Number N 
Depth1 Volume1 
Depth2 Volume2 
Depth3 Volume3 
Depth4 Volume4 
Depth5 Volume5 

誰かが私を助けることができますか?

+0

うわー。フォートラン?真剣に? ;) –

+1

@Matthew: "879のタグ付きタグ[fortran]" - Fortranの死の噂は大きく誇張されています。 – sarnold

+0

@ sarnold-ha ha、私は知っている、私は知っている。あなたはそれについてもう聞くことはもうありません - それは私がそれがポップアップするのを見て驚いた、それだけです。ユーザーに質問する:私は何も否定的な意味ではありませんでした。あなたが必要な助けを得ることを願っています!乾杯! –

答えて

2

あなたはどちらのバージョンのfortranを使用していますか? 95?

文字(len = 1000)または十分な長さで読み込み、その変数から読み取る。

program xx 
character(len=1000) :: buf 
integer :: celnum 
open(11,file='dat.txt',status='old') 

do 
    read(11,'(a)') buf 
    print*,buf(1:12) 
    if (buf(1:12)=='Cell Number ') then 
    read(buf(13:1000), *) celnum 
    print *, celnum 
    elseif (buf(1:5) == 'Depth') then 
    ! here it is not clear what I am suppose to read 
    else 
    print*,'que?' 
    stop 
    endif 

enddo 
end 
+0

ありがとう、これは私を助けてくれました! – user1133418

4

@yosukesabiaによって答え、あなたはおそらく、そのはから内部読み出しを行うことに基づいて、文字列に読み、その後、あなただけ読んだものを決定する文字列を見ての標準的なアプローチを使用したいと文字列。

しかし、読み込んだデータを保存する方法の問題もあります... セルごとに不明な数のセルと不明な数のデータ項目があるため、最も洗練された方法がありますそれぞれのリンクリストタイプを作成します。セルのリストを取得するには、新しいセルに出会ったら、そのリストに追加します。セルタイプ自体には、セルデータタイプリストのリストが含まれています。新しいデータ項目がある場合は、そのリストに追加します。リンクされたリストはおそらく、未知数の項目を処理する最善の方法です。最近の質問は、Fortranのリンクリストに関連しています:How can I implement a linked list in fortran 2003-2008。それ以外の場合は、ファイルを読み込み、巻き戻しまたはバックスペースを行い、正しいサイズの配列を割り当ててから、再度読み取ることができます。基本的な方法は、可能な限り最大数のセルでサイズが固定された型の配列とセルあたりのデータ項目の可能な最大数を持つことです。シンプルですが、非常に控えめです。最大数の推測が間違っていると、バグが発生しやすくなります。

+0

あなたの答えはMSBにありがとうございました。それは私が最初に覚えていた考えでした。 – user1133418

関連する問題