En este tema, aprenderemos cómo manejar el posicionamiento dentro de archivos en Fortran. Esto incluye cómo mover el puntero de archivo a diferentes posiciones para leer o escribir datos en ubicaciones específicas. Este conocimiento es crucial para trabajar con archivos de manera eficiente, especialmente cuando se trata de archivos grandes o cuando se necesita acceder a datos en posiciones específicas.

Conceptos Clave

  1. Puntero de Archivo: Es una referencia a la posición actual en un archivo desde donde se leerá o escribirá el siguiente dato.
  2. Posicionamiento Relativo y Absoluto: El puntero de archivo puede moverse a una posición específica (absoluta) o desplazarse un número de posiciones desde la posición actual (relativa).
  3. Funciones de Posicionamiento: Fortran proporciona funciones específicas para mover el puntero de archivo.

Funciones de Posicionamiento

REWIND

La instrucción REWIND mueve el puntero de archivo al principio del archivo.

REWIND(unit)
  • unit: El número de unidad del archivo.

Ejemplo:

OPEN(UNIT=10, FILE='data.txt', STATUS='OLD')
REWIND(10)

BACKSPACE

La instrucción BACKSPACE mueve el puntero de archivo una posición hacia atrás.

BACKSPACE(unit)
  • unit: El número de unidad del archivo.

Ejemplo:

OPEN(UNIT=10, FILE='data.txt', STATUS='OLD')
BACKSPACE(10)

ENDFILE

La instrucción ENDFILE mueve el puntero de archivo al final del archivo.

ENDFILE(unit)
  • unit: El número de unidad del archivo.

Ejemplo:

OPEN(UNIT=10, FILE='data.txt', STATUS='OLD')
ENDFILE(10)

INQUIRE

La instrucción INQUIRE se utiliza para obtener información sobre el archivo, incluyendo la posición del puntero de archivo.

INQUIRE(UNIT=unit, POS=position)
  • unit: El número de unidad del archivo.
  • position: Variable donde se almacenará la posición actual del puntero de archivo.

Ejemplo:

INTEGER :: pos
OPEN(UNIT=10, FILE='data.txt', STATUS='OLD')
INQUIRE(UNIT=10, POS=pos)
PRINT *, 'Current position:', pos

Ejemplo Práctico

Vamos a ver un ejemplo completo que ilustra cómo utilizar estas funciones para manipular el puntero de archivo.

Código:

PROGRAM FilePositioning
  IMPLICIT NONE
  INTEGER :: unit, pos
  CHARACTER(LEN=100) :: line

  unit = 10
  OPEN(UNIT=unit, FILE='data.txt', STATUS='OLD')

  ! Leer la primera línea
  READ(unit, '(A)') line
  PRINT *, 'First line:', TRIM(line)

  ! Mover el puntero al principio del archivo
  REWIND(unit)
  READ(unit, '(A)') line
  PRINT *, 'After REWIND, first line again:', TRIM(line)

  ! Mover el puntero al final del archivo
  ENDFILE(unit)
  INQUIRE(UNIT=unit, POS=pos)
  PRINT *, 'Position after ENDFILE:', pos

  ! Mover el puntero una posición hacia atrás
  BACKSPACE(unit)
  INQUIRE(UNIT=unit, POS=pos)
  PRINT *, 'Position after BACKSPACE:', pos

  CLOSE(unit)
END PROGRAM FilePositioning

Explicación:

  1. Apertura del Archivo: Se abre el archivo data.txt en la unidad 10.
  2. Lectura de la Primera Línea: Se lee y se imprime la primera línea del archivo.
  3. Rebobinado del Archivo: Se utiliza REWIND para mover el puntero al principio del archivo y se vuelve a leer la primera línea.
  4. Mover al Final del Archivo: Se utiliza ENDFILE para mover el puntero al final del archivo y se consulta la posición.
  5. Retroceder una Posición: Se utiliza BACKSPACE para mover el puntero una posición hacia atrás y se consulta la posición nuevamente.
  6. Cierre del Archivo: Se cierra el archivo.

Ejercicio Práctico

Ejercicio:

  1. Crea un archivo de texto llamado example.txt con el siguiente contenido:

    Line 1
    Line 2
    Line 3
    Line 4
    Line 5
    
  2. Escribe un programa en Fortran que:

    • Abra el archivo example.txt.
    • Lea e imprima la tercera línea del archivo.
    • Mueva el puntero al principio del archivo y lea la primera línea.
    • Mueva el puntero al final del archivo y retroceda dos posiciones para leer la penúltima línea.

Solución:

PROGRAM FilePositioningExercise
  IMPLICIT NONE
  INTEGER :: unit, i
  CHARACTER(LEN=100) :: line

  unit = 10
  OPEN(UNIT=unit, FILE='example.txt', STATUS='OLD')

  ! Leer la tercera línea
  DO i = 1, 3
    READ(unit, '(A)') line
  END DO
  PRINT *, 'Third line:', TRIM(line)

  ! Mover el puntero al principio del archivo y leer la primera línea
  REWIND(unit)
  READ(unit, '(A)') line
  PRINT *, 'First line:', TRIM(line)

  ! Mover el puntero al final del archivo y retroceder dos posiciones
  ENDFILE(unit)
  BACKSPACE(unit)
  BACKSPACE(unit)
  READ(unit, '(A)') line
  PRINT *, 'Penultimate line:', TRIM(line)

  CLOSE(unit)
END PROGRAM FilePositioningExercise

Conclusión

En esta sección, hemos aprendido cómo manejar el posicionamiento de archivos en Fortran utilizando las instrucciones REWIND, BACKSPACE, ENDFILE e INQUIRE. Estas herramientas son esenciales para trabajar eficientemente con archivos, permitiendo un control preciso sobre la lectura y escritura de datos en diferentes posiciones del archivo. Con estos conocimientos, estarás mejor preparado para manejar archivos de manera más avanzada en tus proyectos de Fortran.

© Copyright 2024. Todos los derechos reservados