2012-01-06 119 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 

有人可以幫助我嗎?

您使用該FORTRAN版本
+0

哇。 Fortran語言?真的嗎? ;) – 2012-01-06 01:38:41

+1

@Matthew:「標籤爲[tag:fortran]的879個問題」 - 關於Fortran死亡的傳聞被大大誇大了。 – sarnold 2012-01-06 01:40:59

+0

@ sarnold - 哈哈,我知道,我知道。你再也聽不到太多了 - 讓我驚訝的是看到它彈起來了,就這些。向用戶提問:我沒有任何意思。希望你得到你需要的幫助!乾杯! – 2012-01-06 01:45:09

回答

2

? 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 2012-01-12 17:31:36

4

如回答@yosukesabia,你可能想使用的讀入一個字符串,然後看串決定你剛纔讀,然後根據從做一個內部讀取的標準方法串。

但是,一旦閱讀完數據後,如何存儲數據也會出現問題...... 由於每個單元格都有未知數量的單元格和未知數量的數據項,所以最優雅的方法是爲每個創建鏈接列表類型。要列出單元格列表,並在遇到新單元格時添加到列表中。單元類型本身包含單元數據類型列表。當您遇到新的數據項時,您將添加到該列表中。鏈接列表可能是處理未知數量項目的最佳方式。最近的問題涉及到Fortran中的鏈表:How can I implement a linked list in fortran 2003-2008。否則,您可以讀取文件,倒帶或退格,並分配正確大小的數組,然後重新讀取。原始方式是具有固定長度的類型數組,其大小爲最大可能的單元數,以及每個單元的最大可能數量的數據項。簡單但非常不雅。如果您對最大數量的猜測是錯誤的,那麼容易出錯。

+0

謝謝MSB的回答,那是我一開始就想到的想法。 – user1133418 2012-01-06 17:09:43

相關問題