2013-10-24 3 views
1

Я хочу прочитать файл. Размер файла 20 * 4 содержит символ и цифру и прибегает к другому файлу, но у меня всегда есть сервер forrtl (64): Ошибка преобразования ввода в fortran Я буду оценивать если кто-нибудь может мне помочь.Ошибка преобразования ввода в 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 
Смежные вопросы