2014-01-05 5 views
1

Я новичок в программировании fortran. Я хотел бы открыть несколько файлов .txt (CrossSec01 to CrossSec10) и прочитать данные Allocatable массивов в один файл.Открыть и прочитать mulitple .txt файлы

Мой код дает мне «конец ошибки файла» в «read». Может ли кто-нибудь из новичков помочь мне, пожалуйста?

Вот мой код:

implicit none 
real(8), allocatable :: dat(:,:,:) ! a 3D array, no defined size yet 
integer :: i,j,k,m,n      
integer :: x,y,z 

open(unit=123,file="crossSec01.txt") ! opens 1st file reads & closes file 
    !read (100,20) ((dat(i,j,k) 
    read(123,*) y,x 
    z=30 
    close(123) 

    allocate (dat(i,j,k)) 


    do k=1,z 
    write(str,'("crossSec",i2.2,".txt")')k 
    open(unit=345,file=str,status="old") 
    read(345,*) 
    read(345,*) 
    read(345,*) 

    do i = 1,y 
    read(345,*)(dat(i,j,k),j=1,x) ! This is where I get my fortran runtime error "end of file" error. 

    end do 
    close(345) 
    end do 
+0

Являются ли 'i',' j' и 'k' известными/инициализированными во время выписки? Вы читаете правильное количество элементов из файла? Я бы начал с добавления 'stat' /' iostat' ко всем операторам ввода-вывода и 'allocate', чтобы проверить, успешно ли выполняются все операции. –

+3

Очевидно, вы хотите, чтобы первое измерение было y, второе x и третье z, но вы имеете i, j, k в инструкции allocate. –

+0

Спасибо М.С.Б. код работал. Приветствия. – user3161781

ответ

0
allocate (dat(i,j,k)) 

Я думаю, что это, где происходит ошибка. Вы выделяете массив dat с размерами i,j,k, но i,j,k еще не инициализированы. В этот момент i, j и k имеют значение как ноль. Это сделает массив dat нулевых габаритов, и вы ничего не сможете записать в него. Я думаю, вы пытались сделать allocate (dat(y,x,z)).

+2

Этот ответ является расширением комментария @ MSB по вышеуказанному вопросу. В этом нет ничего плохого. Но в ответе есть небольшая ошибка: если 'i, j, k' не инициализируются и не назначаются, то нет гарантии, что они будут иметь значение' 0', когда выполняется инструкция 'allocate'. –

Смежные вопросы