Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Input 如何在FORTRAN中读取结构未知的数据文件?_Input_Fortran - Fatal编程技术网

Input 如何在FORTRAN中读取结构未知的数据文件?

Input 如何在FORTRAN中读取结构未知的数据文件?,input,fortran,Input,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?95岁 以字符(len=100

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

该文件如下所示:

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

有人能帮我吗?

你用的是哪种版本的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

您正在使用哪个版本的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

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

但也有一个问题,即一旦你读取了数据,如何存储它。。。
由于每个单元格都有未知数量的单元格和未知数量的数据项,因此最优雅的方法是为每个单元格创建一个链表类型。若要拥有单元格列表,当遇到新单元格时,请将其添加到该列表中。单元格类型本身包含一个单元格数据类型列表。当您遇到新的数据项时,您会将其添加到该列表中。链表可能是处理未知数量项目的最佳方式。最近的一个问题与Fortran中的链表有关:。否则,您可以读取文件、倒带或退格,并分配正确大小的数组,然后重新读取。基本方法是具有固定长度的类型数组,大小为最大可能的单元格数,以及每个单元格中最大可能的数据项数。简单,但很不雅观。如果您对最大数字的猜测是错误的,则很容易出现错误。

正如@yosukesabia所回答的,您可能希望使用标准方法读取字符串,然后查看该字符串以确定您刚刚读取的内容,然后在此基础上对该字符串进行内部读取

但也有一个问题,即一旦你读取了数据,如何存储它。。。
由于每个单元格都有未知数量的单元格和未知数量的数据项,因此最优雅的方法是为每个单元格创建一个链表类型。若要拥有单元格列表,当遇到新单元格时,请将其添加到该列表中。单元格类型本身包含一个单元格数据类型列表。当您遇到新的数据项时,您会将其添加到该列表中。链表可能是处理未知数量项目的最佳方式。最近的一个问题与Fortran中的链表有关:。否则,您可以读取文件、倒带或退格,并分配正确大小的数组,然后重新读取。基本方法是具有固定长度的类型数组,大小为最大可能的单元格数,以及每个单元格中最大可能的数据项数。简单,但很不雅观。如果你对最大数量的猜测是错误的,那么很容易出现错误。

@Matthew:“879个问题被标记”--关于Fortran死亡的谣言被大大夸大了。@sarnold哈哈,我知道,我知道。你再也听不到太多关于它的消息了——看到它突然出现,我很惊讶,仅此而已。向用户提问:我没有任何负面的意思。希望你得到你需要的帮助!干杯@MatthewPatrickCashatt-我每天看到这里出现5-10个问题……我认为FORTRAN的使用仍然比你想象的要多。现代FORTRAN被称为FORTRAN,而不是FORTRAN(虽然两者都还在使用)。@Matthew:“879个问题被标记”——关于FORTRAN死亡的谣言被大大夸大了。@sarnold哈哈,我知道,我知道。你再也听不到太多关于它的消息了——看到它突然出现,我很惊讶,仅此而已。向用户提问:我没有任何负面的意思。希望你得到你需要的帮助!干杯@MatthewPatrickCashatt-我每天都会在这里看到大约5-10个问题…我认为FORTRAN的使用仍然比你想象的要多。现代FORTRAN被称为FORTRAN,而不是FORTRAN(虽然两者都还在使用)。感谢MSB的回答,这是我一开始想到的想法。谢谢MSB的回答,这是我一开始的想法。谢谢你,这对我帮助很大!谢谢,这对我帮助很大!