2016-11-09 97 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

相關問題