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
Fortran 如何从多个文件中读取数据并写入单个文件的列中_Fortran_Fortran90 - Fatal编程技术网

Fortran 如何从多个文件中读取数据并写入单个文件的列中

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

我是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(:),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)(