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