分配的矩阵和输入文件

时间:2017-03-09 16:51:49

标签: fortran

我有一个存储两列的输入数据文件(第一列包含变量的名称,第二列包含它们的值)。我试图通过我的FORTRAN脚本读取这个输入文件,并在屏幕上打印我刚刚创建的变量。

以下是输入文件,脚本以及执行时终端上显示的终端输出:

输入文件:

a    7 2 4
b    150
vec1 1 2 3
vec2 4 5 6 
c    56

脚本

program main
implicit none
character(16) :: cinput
integer :: a0,a1,a2,b0,c0,i,j
integer,dimension(:,:),allocatable :: gfd
open(9, file='inputdata.dat')
read(9,*) cinput,a0,a1,a2
read(9,*) cinput,b0
allocate(gfd(3,2))
read(9,*) cinput,gfd(:,1)
read(9,*) cinput,gfd(:,2)
read(9,*) cinput,c0
close(9)
write(*,*) 'a0=', a0,'a1=', a1,'a2=', a2,'b0=', b0,'c0=', c0
do j=1,2
    do i=1,3
        write(*,*) gfd(i,j)
    enddo
enddo
end program main

终端上的输出

a0 = 7, a1 = 2, a2 = 4, b0 = 150, c0 = 56
1
2
3
4
5
6

现在,这很好,但是有没有办法将值分配给变量“gfd”而不必在“allocate”中指定数组的大小?然后,我可以使用更长/更小的数组修改输入文件,而不必在分配变量“gfd”时修改脚本。

如果您能帮助我,感谢您的支持! ms518

编辑:感谢您的回答,此过程正常运行,现在可以在输入文件中使用各种数组大小,而无需修改fortran脚本。以下是inputfile,脚本和获得的结果的修改。

输入文件:

size 5 2
a    7 2 4
b    150
vec1 1 2 3 4 5
vec2 6 7 8 9 10
c    56

脚本

program main
implicit none
character(16) :: cinput
integer :: a0,a1,a2,b0,c0,i,j, rows, cols
integer,dimension(:,:),allocatable :: gfd
open(9, file='inputdata.dat')
read(9,*) cinput,rows,cols
read(9,*) cinput,a0,a1,a2
read(9,*) cinput,b0
allocate(gfd(rows,cols))
read(9,*) cinput,gfd(:,1)
read(9,*) cinput,gfd(:,2)
read(9,*) cinput,c0
close(9)
write(*,*) 'a0=', a0,'a1=', a1,'a2=', a2,'b0=', b0,'c0=', c0
do j=1,cols
    do i=1,rows
        write(*,*) gfd(i,j)
    enddo
enddo
end program main

终端上的输出

a0 = 7, a1 = 2, a2 = 4, b0 = 150, c0 = 56
1
2
3
4
5
6
7
8
9
10

1 个答案:

答案 0 :(得分:0)

指定数组大小的最佳方法是将其维度包含在输入文件中,读取它们,分配数组,然后读取数组。

如果您需要帮助编程,请修改您的问题。如果您愿意,您可以发布修改后的代码来回答您自己的问题。