gpt4 book ai didi

file-io - 无需提前阅读免费格式

转载 作者:行者123 更新时间:2023-12-02 21:26:17 25 4
gpt4 key购买 nike

在给定的文件记录中,我需要首先读取前两个整数元素,然后读取该行的其余部分(大量实数元素),因为赋值取决于前 2 个。假设格式为前两个整数元素的定义并不明确。

解决问题的最佳方法可能是:

read(unitfile, "(I0,I0)", advance='no') ii, jj
read(unitfile,*) aa(ii,jj,:)

但在我看来,gfortran 中不允许使用“(I0)”规范。

基本上,在unitfile中读取的文件可能类似于:

0   0    <floats>
0 10 <floats>
10 0 <floats>
100 0 <floats>
100 100 <floats>

使用任何类似 Fortran 的固定字段格式规范都很难读取。

有没有其他方法可以解决这个看似微不足道的问题?

最佳答案

这应用字符串操作来获取各个组件,以空格 ' ' 和/或制表符 (char(9)) 分隔:

program test
implicit none
character(len=256) :: string, substring
integer :: ii, jj, unitfile, stat, posBT(2), pos
real, allocatable :: a(:)

open(file='in.txt', newunit=unitfile, status='old' )
read(unitfile,'(a)') string

! Crop whitespaces
string = adjustl(trim(string))

! Get first part:
posBT(1) = index(string,' ') ! Blank
posBT(2) = index(string,char(9)) ! Tab
pos = minval( posBT, posBT > 0 )

substring = string(1:pos)
string = adjustl(string(pos+1:))
read(substring,*) ii

! Get second part:
posBT(1) = index(string,' ') ! Blank
posBT(2) = index(string,char(9)) ! Tab
pos = minval( posBT, posBT > 0 )

substring = string(1:pos)
string = adjustl(string(pos+1:))
read(substring,*) jj

! Do stuff
allocate( a(ii+jj), stat=stat )
if (stat/=0) stop 'Cannot allocate memory'

read(string,*) a

print *,a

! Clean-up
close(unitfile)
deallocate(a)
end program

对于文件in.txt,例如:

1 2 3.0 4.0 5.0

这会导致

./a.out 
3.00000000 4.00000000 5.00000000

注意:这只是一个简单的示例,请根据您的需要进行调整。

关于file-io - 无需提前阅读免费格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21170031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com