program inputOutputArrays real, dimension(:), allocatable :: array integer(kind=2), parameter :: unit=10 integer :: nrFiles,nrColumns ! Accedo al primer archivo de lectura call readHeadersFromFile(10,"./inputArrays.dat",nrFiles,nrColumns) ! Abro un arhivo nuevo para escribir e otra unidad (11) open(11,file="./outputArrays.dat") ! Sabiendo la cantidad de elementos de c/fila de "inputArrays.dat" inicializo ! a dimension del array que va a contener los eementos de c/fila allocate(array(nrColumns)) ! Leo en array y voy escribiendo a "outputArray.dat" y en pantalla print*,"columnas ",nrColumns do i=1,nrFiles read(10,*) (array(j), j=1,nrColumns) ! Imprimo a un archivo y a pantalla con 10 caracteres (INCLUIDO EL PTO. !) y 3 decimales write(11,'(3f8.3)') array write(*, '(3f8.3)') array end do ! Cierro los archivos y el array!! close(10) close(11) deallocate(array) ! Si quiero acceder ahora a un archivo similar pero con una cantidad distinta de filas y columnas ! repito el procedimiento, lamando a la subrutina on os argumentos pertinentes, haciendo un nuevo ! allocate del mismo array con su nueva dimension, y cerrando todo cuando corresponda. contains subroutine readHeadersFromFile(unit,inputFileName,nrFiles,nrColumns) !------ DECLARACIONES ----------------- ! Los argumentos de entrada son la unidad de lectura, e nombre del archivo ! Como argumentos de salida, tengo el numero de filas a leer (nrFiles)y la ! cantidad de elementos por fila (rColumns) separados por un espacio. integer, intent(in) :: unit character(len=50), intent(in) :: inputFileName integer, intent(out):: nrFiles,nrColumns ! aux es solo para absorber los comentarios que no me interesan !,en caso de necesitarlos para escribiros en alguna salida, agrego argumentos de salida character(len=50) :: aux open(unit,file=inputFileName) read(unit,*) aux read(unit,*) aux read(unit,'(I1)') nrFiles read(unit,*) aux read(unit,'(I1)') nrColumns end subroutine readHeadersFromFile end program inputOutputArrays