2016-11-09 88 views
0

我想从文本文件中读取我的测量数据。数据具有例如下面的表格:从文本文件中读取测量数据并将它们放入Fortran阵列中

0    0.0531139  
0.000157095  0.306123   
0.000314191  0.133868   
0.000471286  0.29799  
0.000628381  0.0182098  
0.000785477  0.121222   
0.000942572  0.32111  
0.00109967  0.0267326  
0.00125676  0.49554  
0.00141386  0.433729  

我的代码如下:

SUBROUTINE test(name) 
implicit none 
    character        :: name*(*) 
    real*8,allocatable, dimension(:,:) :: measMatrix 
    integer        :: i, 
&           nrcols 
    nrcols = 2 

    nrrows = 10 

    allocate(measMatrix(nrcols,nrrows)) 

    open(unit = 20, file = Dateiname, status = 'old', action = 'read') 

    do i = 1, nrrows 
     read(20,*) measMatrix(i,1:nrcols) 
    end do 

    close(20) 

    open(unit = 10, file = 'Test4.txt')  
    do i = 1,nrrows 
     write(10,777) (measMatrix(i,j), j = 1,nrcols) 
    end do 
    close(10) 
777 format(F12.9,4X,F12.9) 
    deallocate(measMatrix) 
     END 

但是,输出是错误的:

0.000000000  0.000314191 
0.000157095  0.000471286 
0.000314191  0.000628381 
0.000471286  0.000785477 
0.000628381  0.000942572 
0.000785477  0.001099670 
0.000942572  0.001256760 
0.001099670  0.001413860 
0.001256760  0.495540000 
0.001413860  0.433729000 

我在做什么错? :(

在此先感谢您的帮助。

+0

您的代码不完整,您是否可以扩展以包含最少数量的更改以使其成为工作示例(例如,您不会显示'nrrow'的'nrrows'声明)。你应该实际上也应该检查放入'alloc_status'中的东西来检查分配是否正常工作。 (注意你也可以定义第一维的长度为'nrcols',但在循环中你说第一维是'nrrows'长,而第二维是'nrcols'长)。 –

+0

当然,对不起。我更改了代码。 – ingenium

回答

0

第一个维度是禁食的变化之一,并在内存中的一个相邻。

因此,在记忆空间(10,2)被布置在如:

1 11 
2 12 
3 13 
4 14 
5 15 
6 16 
7 17 
8 18 
9 19 
10 20 

也许你想这样的:

nrrows = 10 
nrcols = 2 
allocate(measMatrix(10,2)) 

do i = 1, nrrows 
    read(20,*) measMatrix(i,:) 
end do 
... 
do i = 1, nrrows 
    write(10,777) measMatrix(i,:) 
end do 

我更喜欢这样的:

integer   :: Crnt_Row, Crnt_Col 

nrrows = 10 
nrcols = 2 
allocate(measMatrix(10,2)) 
WRITE(*,*)'Shape(measMatrix)=',SHAPE(measMatrix) 

do CurrRow = 1, nrrows 
    read(20,*) measMatrix(CurrRow,:) 
end do 
... 
do CurrRow = 1, nrrows 
    write(10,777) measMatrix(CurrRow,:) 
end do 

使用IMPLICIT NONE也可以帮助理解@ d_1999提到的内容。

+0

我有多愚蠢。非常感谢你。 – ingenium

相关问题