Lea una matriz de un archivo de texto e imprima -- arrays campo con matrix campo con fortran campo con fortran90 camp Relacionados El problema

Read a matrix from a text file and print it


-3
vote

problema

Español

Quiero escribir una matriz de 3 x 4 de un archivo numérico TXT de 12 líneas He escrito un programa Fortran 90 para el mismo

  program array   implicit none    integer, parameter :: I4B = selected_int_kind(4)   integer (I4B), allocatable, dimension (:,:) :: arr   integer (I4B) :: i    open(unit=99, file='1.txt')   open(unit=100, file='out.txt')    Allocate (arr(3,4))    do i=1, 12     read(99,*)arr(3,4)     write(100,*),arr(3,4)   enddo    close (99)    deAllocate (arr)    stop endprogram array   

pero está dando un error

  At line 10 of file array.f90 (unit = 99, file = '1.txt') Fortran runtime error: End of file   

La línea número 10 es read(99,*)arr(3,4) .

Original en ingles

I want to write an 3 x 4 matrix from a 12 line txt numerical file I have written a Fortran 90 program for the same

program array   implicit none    integer, parameter :: I4B = selected_int_kind(4)   integer (I4B), allocatable, dimension (:,:) :: arr   integer (I4B) :: i    open(unit=99, file='1.txt')   open(unit=100, file='out.txt')    Allocate (arr(3,4))    do i=1, 12     read(99,*)arr(3,4)     write(100,*),arr(3,4)   enddo    close (99)    deAllocate (arr)    stop endprogram array 

but it's giving an error

At line 10 of file array.f90 (unit = 99, file = '1.txt') Fortran runtime error: End of file 

Line number 10 is read(99,*)arr(3,4).

           
         
         

Lista de respuestas

0
 
vote

Aquí hay una implementación muy simple de su matriz. Utiliza el hecho de que el primer índice es el cambio más rápido. Así que solo sigo leyendo hasta que se llenen los 12 elementos de la matriz.

Luego, para la salida, especifique un formato que debe escribir 3 valores por línea.

  var entities: [Any]? {     didSet {         self.removeActivityIndicator()     } } 8  

Si desea hacerlo explícitamente, debe calcular los dos índices de forma independiente por cada valor leído:

  var entities: [Any]? {     didSet {         self.removeActivityIndicator()     } } 9  

Por cierto, su código:

  class ActivityManager {      private static var retainCount: Int = 0 {         didSet {             if(oldValue > 0 && newValue == 0) removeActivityWindow()             else if(oldValue == 0 && newValue > 0) showActivityWindow()         }     }      static func beginActivity() { retainCount += 1 }     static func endActivity() { retainCount -= 1 } } 0  

Sólo 12 veces leo un número único del archivo de entrada, lo almacenaría en la última ubicación de la matriz, luego escriba ese mismo número al archivo de salida.

Además, su mensaje de error sugiere que ha intentado leer más allá del final del archivo. O su class ActivityManager { private static var retainCount: Int = 0 { didSet { if(oldValue > 0 && newValue == 0) removeActivityWindow() else if(oldValue == 0 && newValue > 0) showActivityWindow() } } static func beginActivity() { retainCount += 1 } static func endActivity() { retainCount -= 1 } } 1 no contiene 12 líneas, o es posible que haya leído algo más primero, por ejemplo, averiguar cuántos elementos hay. En ese caso, deberías agregar un let window = UIWindow(frame: UIApplication.shared.windows[0].frame) // Create a window window.windowLevel = .alert // Define which level it should be in window.rootViewController = controller // Give it a root view controller window.makeKeyAndVisible() // Show the window 22 antes de comenzar a leer los números reales.

 

Here's a very simple implementation of your array. It uses the fact that the first index is the fastest changing. So I just keep reading until all 12 elements of the array are filled.

Then, for output, I specify a format that it should write 3 values per line.

program readfile     implicit none     integer, dimension(:, :), allocatable :: arr     open(unit=99, file='1.txt', action='READ', status='OLD')     open(unit=100, file='out.txt', action='WRITE', status='NEW')     allocate(arr(3, 4))     read(99, *) arr     write(100, '(3I4)') arr     close(99)     close(100) end program readfile 

If you want to do it explicitly, you have to calculate the two indices independently for each value read:

program readfile     implicit none     integer, dimension(:, :), allocatable :: arr     integer :: i, row, col     open(unit=99, file='1.txt', action='READ', status='OLD')     open(unit=100, file='out.txt', action='WRITE', status='NEW')     allocate(arr(3, 4))      ! Read the elements:     do i = 1, 12         row = mod(i-1, 3)+1         col = (i-1) / 3 + 1         read(99, *) arr(row, col)     end do      ! write the elements:     do i = 1, 4         write(100, '(3I4)') arr(:, i)     end do     close(99)     close(100) end program readfile 

By the way, your code:

do i = 1, 12     read(99, *) arr(3, 4)     write(100, *) arr(3, 4) end do 

would just 12 times read a single number from the input file, store it in the last location of the array, then write that same number back to the output file.

Also, your error message suggests that you have tried to read past the end of the file. Either your 1.txt doesn't contain 12 lines, or you might have read something else first, for example to find out how many elements there are. In that case, you would need to add a rewind(99) before you start reading the actual numbers.

 
 

Relacionados problema

0  Encontrar elemento específico en matriz con especificador de formato  ( Finding specific element in array with format specifier ) 
Estoy tratando de extraer un elemento específico en mi matriz de matriz que está en un archivo de texto y no parece extraer el elemento que quiero. Aquí está ...

1  Escriba en NetCDF como una variable en función del tiempo  ( Write in netcdf as a variable as a function of time ) 
Estoy tratando de modificar un código FORTRAN 90 que escribe una matriz 2D a la salida en un formato clásico de NetCDF. Me gustaría que la variable tenga una ...

38  ¿Cómo utiliza los datos del módulo Fortran 90?  ( How do you use fortran 90 module data ) 
Digamos que tiene un módulo de Fortran 90 que le contiene lotes de variables, funciones y subrutinas. En su Declaración USE , ¿qué convención sigue: dec...

0  FORTRAN E / S, la primera leída es EOF?  ( Fortran i o first read is eof ) 
Estoy tratando de usar un código de Fortran viejo con un nuevo código Java que funciona en Windows (como EXE) pero no en OS X. Intento construirlo en Eclipse ...

0  Conversión entero al carácter en FORTRAN90  ( Converting integer to character in fortran90 ) 
Estoy tratando de convertir un entero en mi programa en Fortran 90. Aquí está mi código: Write(Array(i,j),'(I5)') Myarray(i,j) Array es una matriz en...

1  Configuración de formato de salida dinámica  ( Dynamic output format setting ) 
Intenté hacer que el formato de salida dinámicamente en el sentido de que el número de variables que se imprimirá se imprima podría variar dinámicamente. Habí...

2  Módulo llamando a un procedimiento externo con interfaz implícita  ( Module calling an external procedure with implicit interface ) 
El siguiente código, combinando los procedimientos del módulo y procedimientos externos : module module_dummy implicit none contains subroutine f...

0  FORTRAN 90 Crear un error de sintaxis de directorio  ( Fortran 90 create directory syntax error ) 
Pensé que descubrí cómo crear directorios en este post Creación de directorio con nombre que contiene número real en Fortran Pero cuando intenté crear u...

0  Función de lectura de un archivo en Fortran 90  ( Reading function from a file in fortran 90 ) 
Tengo un solucionamiento de optimización en Fortran 90. Por lo tanto, si quiero cambiar la función objetiva. Tengo que modificar el archivo principal y escrib...

-1  Modelo de Guassian Discreto en Fortran 90  ( Discrete guassian model in fortran 90 ) 
Quiero generar números aleatorios discretos (para 1000 Ensemble) con la distribución gaussiana con cero medio y varianza 2.25. Vi en el libro recetas numéric...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos