2013-10-24 32 views
1

我想讀取一個文件20 * 4維包含字符和數字,並將其解壓到另一個文件,但我總是有forrtl服務器(64):輸入轉換錯誤fortran 我將aprreciate如果有人能幫助我。Fortran中輸入轉換錯誤

我有一個輸入文件a.txt中(20 * 4)所示:

index Ti Te  Ne 

1  2.3 2.5 0.6 

2  2.9 3.2 0.8 

3  3.4 3.6 1.1 

. 
. 
. 

20  7.3  8.9 3.5 

我的計劃是test.f90象下面這樣:

program test 

implicit none 

real*8,allocatable :: prof_Ne(:),prof_Te(:),prof_Ti(:) 

integer :: i, j, n_skip, n_prof 
character :: index*22 

n_prof = 20 

allocate(prof_Ne(n_prof), prof_Te(n_prof), prof_Ti(n_prof)) 

open(21,file='a.txt') 

read(21,'(A25)') index 

write(*,*) index 

n_skip = 4 
do i=1,n_skip 
    read(21,*) 
enddo 

do i=1,n_prof 
    read(21,'(i2,3e9.5)') j,prof_Ne(i),prof_Te(i),prof_Ti(i) 
enddo 
close(21) 
write(*,*) prof_Ne 

end program 
+0

我想指出的是,你寫你的文件因爲有順序Ti,Te,Ne,但是按照Ne,Te,Ti(即向後)讀取它。我想當你計劃使用這些值時會引起一些問題。 –

回答

1
  • 我不會指定閱讀時的格式 - 這可能會導致問題(就像它爲你所做的那樣)。
  • 您將前25個字符(不止是第一行)讀入索引 - 可能不是您想要的。使用read(*,*)後跟四個字符串可讓Fortran決定將哪些字符串分開。
  • 然後您跳過四條記錄 - 爲什麼?
  • 最後,你讀了20行到陣列 - 在你的案例超出文件末尾!同樣,您指定的格式(我不會)...

我在你想達到什麼樣的猜測是如下:

program test 

    implicit none 

    real*8,allocatable :: prof_Ne(:),prof_Te(:),prof_Ti(:) 

    integer :: i, j, n_prof 
    character(len=22) :: index, dummy1, dummy2, dummy3 

    n_prof = 20 

    allocate(prof_Ne(n_prof), prof_Te(n_prof), prof_Ti(n_prof)) 

    open(21,file='a.txt') 

    read(21,*) index, dummy1, dummy2, dummy3 
    write(*,*) index, dummy1, dummy2, dummy3 

    do i=1,n_prof 
    read(21,*) j,prof_Ne(i),prof_Te(i),prof_Ti(i) 
    enddo 
    close(21) 
    write(*,*) prof_Ne 

end program