Fortran 如何从多个文件中读取数据并写入单个文件的列中
我是Fortran的新手,需要编写一些相对简单的代码 我有一些文件(各种各样,例如200个文件);特定节点的每个文件,经过一些简化,每个文件包含:Fortran 如何从多个文件中读取数据并写入单个文件的列中,fortran,fortran90,Fortran,Fortran90,我是Fortran的新手,需要编写一些相对简单的代码 我有一些文件(各种各样,例如200个文件);特定节点的每个文件,经过一些简化,每个文件包含: T(i), X(i) 这些是我的输入,我希望输出文件包含: T(i) X(i)1 X(i)2 ... X(i)n 问题是我不能将输出文件的不同列中的数据分开,它们在一列中紧随其后 我的代码是: PROGRAM Output implicit none integer ::nn,n,i,j,l real,dimension(:),allocata
T(i), X(i)
这些是我的输入,我希望输出文件包含:
T(i) X(i)1 X(i)2 ... X(i)n
问题是我不能将输出文件的不同列中的数据分开,它们在一列中紧随其后
我的代码是:
PROGRAM Output
implicit none
integer ::nn,n,i,j,l
real,dimension(:),allocatable::t,x,y,z
character(len=10)::TD
open(11,file='outputX.txt')
allocate (t(1000),x(1000),y(1000),z(1000))
n=5 ! Number of Files
nn=50 ! Number of Rows in each File
Do i=1,n ! loop for opening different files
write(TD,10)i
write(*,*)TD
open(1,file=TD)
Do l=1,nn ! loop for reading rows in each file
read(1,*)t(j),x(j)
write(11,*)x(j) !!!! This is my PROBLEM, all the data shows in
! one column, I want each file in separately
Enddo
Enddo
10 format('100',i3.3,'')
deallocate(x,y,z,t)
END PROGRAM Output
我得到的输出如下:
11
12
13
21
22
23
31
32
33
但事实上,我想要:
11 21 31
12 22 32
13 23 33
所以我得到的是x(1)属于11
,x(2)属于12
,x(3)属于13
等等,不是吗?你可以试试这个:
write(11,100) x(j), x(j+3), x(j+6)
100 format(1X,11F20.4,11F20.4,11F20.4)
所以我得到的是x(1)属于11
,x(2)属于12
,x(3)属于13
等等,不是吗?你可以试试这个:
write(11,100) x(j), x(j+3), x(j+6)
100 format(1X,11F20.4,11F20.4,11F20.4)
您的代码有几个问题
Do i=1,n ! loop for opening different files
write(TD,10)i
write(*,*)TD
open(1,file=TD)
Do l=1,nn ! loop for reading rows in each file
read(1,*)t(j),x(j)
write(11,*)x(j) !!!! This is my PROBLEM, all the data shows in
! one column, I want each file in separately
End do
End do
索引j
完全未定义。你应该把j=1
或0
和j=j+1
放在循环中的某个地方
另一个问题是您的输出。您正在按顺序读取文件。很难将每个文件打印到单独的列中。为每个文件单独设置一行很容易:
write(11,*) x(1:nn)
在内部循环之后
或者使用更精细的控制并避免换行
write(11,'999(g0,1x)') x(1:nn)
(g0是仅使用必要宽度的通用编辑描述符)。只有解决了我上面提到的j
问题,这才有效
要将其放入单独的列中,您必须
您的代码有几个问题
Do i=1,n ! loop for opening different files
write(TD,10)i
write(*,*)TD
open(1,file=TD)
Do l=1,nn ! loop for reading rows in each file
read(1,*)t(j),x(j)
write(11,*)x(j) !!!! This is my PROBLEM, all the data shows in
! one column, I want each file in separately
End do
End do
索引j
完全未定义。你应该把j=1
或0
和j=j+1
放在循环中的某个地方
另一个问题是您的输出。您正在按顺序读取文件。很难将每个文件打印到单独的列中。为每个文件单独设置一行很容易:
write(11,*) x(1:nn)
在内部循环之后
或者使用更精细的控制并避免换行
write(11,'999(g0,1x)') x(1:nn)
(g0是仅使用必要宽度的通用编辑描述符)。只有解决了我上面提到的j
问题,这才有效
要将其放入单独的列中,您必须
二维阵列。。。对于这个问题,它是向后的 但它应该给你一些帮助。。。(希望如此)
二维阵列。。。对于这个问题,它是向后的 但它应该给你一些帮助。。。(希望如此)
每个
按原样写入,将生成一行(“记录”)。您需要将各种值的写入合并到一个输出语句中。就像在和中一样。每个按现有方式写入,将生成一行(“记录”)。您需要将各种值的写入合并到一个输出语句中。比如在和中。我不会向初学者展示FORMAT语句作为现代代码的示例。@VladimirF:你对某人所做的评论太多了。如果你不想显示格式声明,也许你也可以帮助作者回答他。。。是的,谢谢你的建议,我已经删除了前面的答案。@VladimirF:我想你也没有正确阅读作者上面的问题。他甚至在他的代码上写了格式声明。对OP的评论是必要的。这应该删除。我试图建议如何改进你的答案。是的,回答我自己并不难。我也在给新用户提供机会,并试图提供帮助,但感谢您的反馈,如果您介意的话,请不要再给您了。@VladimirF:关于OP,即使在我以前的帖子中,我也一直遵循您的建议。我不怀疑你,因为我确实应该删除我以前的答案,我已经这样做了。问题是,您说过,您不会向初学者显示FORMAT语句(在本例中是作者),即使您没有看到作者自己使用FORMAT语句编写。这就是为什么我要帮助他使用FORMAT语句。我确信它不受现代Fortran语言的约束。但是我们在这个网站上的目的是在他/她的问题上互相帮助,对吗?无论如何,也谢谢你。我不会向初学者展示FORMAT语句作为现代代码的示例。@VladimirF:你对某人所做的评论太多了。如果你不想显示格式声明,也许你也可以帮助作者回答他。。。是的,谢谢你的建议,我已经删除了前面的答案。@VladimirF:我想你也没有正确阅读作者上面的问题。他甚至在他的代码上写了格式声明。对OP的评论是必要的。这应该删除。我试图建议如何改进你的答案。是的,回答我自己并不难。我也在给新用户提供机会,并试图提供帮助,但感谢您的反馈,如果您介意的话,请不要再给您了。@VladimirF:关于OP,即使在我以前的帖子中,我也一直遵循您的建议。我不怀疑你,因为我确实应该删除我以前的答案,我已经这样做了。问题是,您说过,您不会向初学者显示FORMAT语句(在本例中是作者),即使您没有看到作者自己使用FORMAT语句编写。这就是为什么我要帮助他使用FORMAT语句。我确信它不受现代Fortran语言的约束。但是我们在这个网站上的目的是在他/她的问题上互相帮助,对吗?不管怎样,也谢谢你。我得到的答案是:读(1,*)(t)(