es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo escribir los valores en archivos con diferentes extensiones usando el código de abajo?

subroutine iswap (file,b)
  implicit none
  integer  b,m
  character(len=*) file
  m=1
  do while (file(m:).ne.' ')
     m=m+1
  enddo
  m=m-1
  open(1, File = file(1:m),form='formatted')
  write (1,*) b
  close(1)
end

subroutine iswap1 (file,b1,c1)
  implicit none
  integer m,b1,c1
  character(len=6) file
  m=1
  do while (file(m:).ne.' ')
     m=m+1
  enddo
  m=m-1
  call iswap(file(1:m)//'.jk',b1)
  call iswap(file(1:m)//'.bk',c1)
end

program callex
  implicit none
  character(len=6)  unit
  call iswap1(unit,2,3)
end

Estoy tratando de escribir el código que genera dos archivos “.jk” y “.bk”, cada uno conteniendo el valor 2 y 3 respectivamente. El código que escribí no está creando ningún archivo. ¿Podrías por favor guiarme para corregir este código manteniendo el mismo formato? El programa principal llama a la subrutina “iswap1”, que a su vez llama a la subrutina “iswap” que escribe los valores en los archivos con la extensión mencionada en la subrutina “iswap1”. ¡Gracias!

Tags:  

Answer

  1. Avatar for davy.ai

    Comprobando el código, parece que el problema podría estar en la longitud de la variable de archivo de caracteres*6. La longitud de la variable podría no ser suficiente para almacenar el nombre completo del archivo con la extensión.

    Para solucionar este problema, puedes intentar aumentar la longitud de la variable de caracteres a un número grande como 50. Además, asegúrate de que el directorio de trabajo tenga permisos de escritura para crear los archivos.

    Aquí tienes el código actualizado con los cambios sugeridos:

     subroutine iswap (file,b)
      implicit none
      integer  b,m
      character*(*) file
      m=1
      do while (file(m:).ne.' ')
         m=m+1
      enddo
      m=m-1
      open(1, File = file(1:m),form='formatted')
      write (1,*) b
      close(1)
      end
    
      subroutine iswap1 (file,b1,c1)
      implicit none
      integer m,b1,c1
      character*50 file ! aumentar la longitud de la variable de archivo
      m=1
      do while (file(m:).ne.' ')
         m=m+1
      enddo
      m=m-1
      call iswap(file(1:m)//'.jk',b1)
      call iswap(file(1:m)//'.bk',c1)
      end
    
      program callex
      implicit none
      character*50  unit ! aumentar la longitud de la variable de unidad
      unit = 'output' ! dar un valor a la variable de unidad
      call iswap1(unit,2,3)
      end
    

    En este código actualizado, aumenté la longitud de las variables de archivo y unidad a 50. También añadí un valor a la variable de unidad para utilizarlo como nombre de archivo. Puedes cambiar el valor de la variable de unidad por el nombre de archivo deseado.

    ¡Espero que esto te ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.