2016-11-09 9 views
0

텍스트 파일에서 측정 데이터를 읽고 싶습니다. 데이터는 예를 들어. 형태 다음 : 내가 잘못 뭐하는 거지텍스트 파일에서 측정 데이터를 읽고이를 Fortran의 배열에 입력하십시오.

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 

그러나

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    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  

내 코드는? 도움에 미리 :(

감사합니다.

+0

코드가 완전하지 않습니다.이 예를 만들기 위해 최소한의 변경 사항을 포함하도록 확장 할 수 있습니까 (예 : 'nrrows'의 'nrrows'선언을 표시하지 않음). 또한 실제로 alloc_status로 놓여진 것을 검사하여 할당이 잘되었는지 확인해야한다. (또한 첫 번째 차원의 길이는'nrcols'로 정의되지만 루프에서 첫 번째 차원은'nrrows '이고 두 번째 차원은'nrcols' long입니다. –

+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을 사용하면 @ d_1999에서 언급 한 내용도 도움이됩니다.

+0

내 부분에 어리석은 짓. 고맙습니다. – ingenium