【问题标题】:How to read a data file with an unknown structure in FORTRAN?如何在 FORTRAN 中读取具有未知结构的数据文件?
【发布时间】:2012-01-06 01:37:34
【问题描述】:

我需要读取包含未定义单元格数量以及每个单元格未知数量数据对的文件。我正在使用 Fortran。

文件如下所示:

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

有人可以帮帮我吗?

【问题讨论】:

  • @Matthew: “879 个问题标记为fortran”——Fortran 死亡的谣言被大大夸大了。
  • @sarnold-ha 哈哈,我知道,我知道。你只是不再听到太多关于它的消息——看到它弹出我很惊讶,仅此而已。对于提出问题的用户:我的意思不是负面的。希望你能得到你需要的帮助!干杯!
  • @MatthewPatrickCashatt - 我看到这里每天会出现大约 5-10 个问题...
  • 我认为 FORTRAN 的使用仍然比你想象的要多。
  • 现代 Fortran 被称为 Fortran,而不是 FORTRAN(尽管两者仍在使用中)。

标签: input fortran


【解决方案1】:

正如@yosukesabia 所回答的那样,您可能希望使用读取字符串的标准方法,然后查看字符串以确定您刚刚读取的内容,然后根据该方法从字符串中进行内部读取。

但是还有一个问题是一旦你读过数据如何存储它...... 由于每个单元格都有未知数量的单元格和未知数量的数据项,因此最优雅的方法是为每个单元格创建一个链表类型。要有一个单元格列表,当你遇到一个新单元格时,添加到该列表中。并且单元格类型本身包含一个单元格数据类型列表。当您遇到新的数据项时,您将添加到该列表中。链表可能是处理未知数量项目的最佳方式。最近的一个问题与 Fortran 中的链表有关:How can I implement a linked list in fortran 2003-2008。否则,您可以读取文件、倒带或退格,并分配正确大小的数组,然后重新读取。原始方法是具有固定长度的类型数组,大小为最大可能的单元格数,以及每个单元格的最大可能数据项数。简单,但非常不雅。如果您对最大数量的猜测错误,则容易出错。

【讨论】:

  • 感谢MSB的回答,这是我一开始的想法。
【解决方案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

【讨论】:

  • 谢谢你,这对我帮助很大!
猜你喜欢
  • 2017-10-30
  • 2021-09-14
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2013-05-16
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多