用Fortran语言读取矩阵
我尝试读取和重写一个只有一系列特定列的矩阵。例如,我有一个11xN矩阵,我想在一个只有第2列和第3列的2xN矩阵中重写它用Fortran语言读取矩阵,fortran,Fortran,我尝试读取和重写一个只有一系列特定列的矩阵。例如,我有一个11xN矩阵,我想在一个只有第2列和第3列的2xN矩阵中重写它 program fluxXYlambda implicit none INTEGER*8::n,i REAL*8,ALLOCATABLE::dati(:,:) open(10,file='test.txt') n=0 do read(10,*,end=100) n=n+1 end do 100 continue rewind(10) allocate(
program fluxXYlambda
implicit none
INTEGER*8::n,i
REAL*8,ALLOCATABLE::dati(:,:)
open(10,file='test.txt')
n=0
do
read(10,*,end=100)
n=n+1
end do
100 continue
rewind(10)
allocate(dati(11,n))
open(12,file='coordXY.txt')
do i=1,n
read(10,*) dati(4,i),dati(5,i)
write(12,*) dati(4,i),dati(5,i)
end do
end program flussiXYlambda
文件coordXY.txt已创建,但为空。最后,由于@francescalus,我解决了这个问题
命令read10,*dati1:5,我读取矩阵dati直到第5列,然后我可以保存它的特定列。非常感谢 你试过看n的值,看它是否如你所期望的那样吗?另外,您的read10,*dati4,i,dati5,i没有读取test.txt的第二列和第三列。你能解释一下test.txt的布局吗?@francescalus是的,正在阅读第4和第5行,这只是一个10列文件的示例,我想看第4和第5行,如果我想看第2和第3行,逻辑步骤不变。n是文件中的行数。我在第一个do cicleIt也没有读第四列和第五列,而是第一列和第二列。你把读数放在哪里并不影响读数。如果你想读这些专栏,你需要像read10,*dati1:5,i。可以说,如果您可以更改问题,使其与示例代码相匹配,也可能会更好。我猜您的n出于某种原因为零,否则您会在输出文件中得到一些内容。写出要检查的n值。除了结尾处的不同文件名的语法错误之外,您的代码为我运行,并将数据放入指定的输出文件中。现在,由于@francescalus指出的错误,这是错误的。但是,如果您修复了这个问题,代码将正常工作,并按照您的要求执行。可能您没有找到正确的输出文件。或者您的编译器可能会因为预先存在的空白文件而忽略某些内容。