[英]How to read a data file with an unknown structure in FORTRAN?
我需要讀取包含數量不確定的單元格和每個單元格未知數量的數據對的文件。 我正在使用Fortran。
該文件如下所示:
Cell Number 1
Depth1 Volume1
Depth2 Volume2
Depth3 Volume3
.
.
.
Cell Number N
Depth1 Volume1
Depth2 Volume2
Depth3 Volume3
Depth4 Volume4
Depth5 Volume5
有人可以幫我嗎?
就像@yosukesabia回答的那樣,您可能希望使用標准方法來讀入字符串,然后查看該字符串以決定剛讀的內容,然后基於該內容對字符串進行內部讀取。
但是,一旦讀取數據,還存在如何存儲數據的問題……由於您同時具有未知數量的單元格和未知數量的數據項,因此最優雅的方法是創建鏈接列表每個類型。 要具有單元格列表,並且遇到新單元格時,請添加到該列表中。 單元格類型本身包含一個單元格數據類型列表列表。 遇到新的數據項時,將添加到該列表。 鏈表可能是處理數量未知的最佳方法。 最近一個與Fortran中的鏈表有關的問題: 如何在fortran 2003-2008中實現鏈表 。 否則,您可以讀取文件,倒退或退格,並分配正確大小的數組,然后重新讀取。 原始方法是具有類型的固定長度數組,其大小以最大可能的單元數和每個單元的最大可能的數據項數為准。 簡單,但非常優雅。 如果您對最大數量的猜測是錯誤的,則容易出錯。
您正在使用哪個版本的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.