Resultados 1 al 5 de 5

Tema: Ayuda con lectura de archivo indexado

  1. #1
      Acabo de llegar...
    J

    Registrado
    enero de 2024
    Ubicación
    Oaxaca
    Mensajes
    4
    Última visita
    30.04.2024

    Agradecimientos
     
    Recibidos
    1
    Enviados
    1

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Base de datos Ayuda con lectura de archivo indexado

    Buenas noches mis compas:

    Estoy aprendiendo cobol, pero requiero abrir un archivo indexado este archivo tiene clave primaria y secundaria, pero hay unos conceptos que no me quedan claros.


    Ya declare en FILE-CONTROL, con select mi archivo indexado.
    En DATA DIVISION paso la extructura de mi archivo indexado.
    En PROCEDURE DIVISION., tengo 2 perform uno READ, para leer el archivo y otro START para aprovechar las claves primarias.

    Una de mis dudas, es primero start y despues el read???
    Yo para leer el archivo utilizo Perform leer until, para leer todo el archivo, pero en que momento voy haciendo mi incremental de mi variable, que utilizo en el perform, porque solo me lee un registro.

    0 Not allowed!

  2. #2
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    802
    Última visita
    Hoy a las 18:22

    Agradecimientos
     
    Recibidos
    440
    Enviados
    365

    Citaciones y menciones
     
    Mentioned
    81 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    13 Post(s)
    Poder de Reputación
    37
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    Hola @JonathanDemons_123,

    A ver, sí, por supuesto que primero un START y después un READ, por lógica, primero posicionas el "puntero" en el lugar que quieres y después haces la lectura. Sin ver el código, te lee un sólo registro, porque haces un READ normal y corriente, y tienes que hacer el READ con un NEXT/PREVIOUS, en los que no hace falta incrementar nada, el propio compilador es el que se encarga de ir hacia adelante o hacia atrás de forma automática, (depende del parámetro usado), la manera más sencilla de hacerlo es:

    Vamos a suponer que tienes un fichero con 500 registros, numerados del 1 al 500 consecutivos y, que quieres leer a partir del registro 333 hasta el último:

    COBOL Código:
    1. WORKING-STORAGE SECTION.
    2. 01  EOF                    PIC 9.
    3. 01  STFILE                PIC XX.      *> FILE-STATUS del fichero
    4. .
    5. .
    6. .
    7. PROCEDURE DIVISION.
    8. INICIO.
    9.      MOVE 333 TO NUMKEY.
    10.      INITIALIZE EOF.
    11.      OPEN INPUT FICHERO.
    12.      PERFORM POSICIONAR.
    13.      PERFORM LEER UNTIL EOF = 1.
    14.      CLOSE FICHERO.
    15.      STOP RUN.
    16. POSICIONAR.
    17.      START FICHERO
    18.                KEY NOT LESS NUMKEY
    19.                      INVALID KEY DISPLAY "Error de posicionamiento... " STFILE
    20.                                   CLOSE FICHERO
    21.                                   STOP RUN
    22.      END-START.
    23. LEER.
    24.      READ FICHERO
    25.               NEXT RECORD
    26.                       AT END
    27.                           MOVE 1 TO EOF
    28.                           DISPLAY "Fin fichero ..."
    29.                       NOT AT END
    30.                              PERFORM HACER-COSAS THRU FIN-HACER
    31.      END-READ.
    32. HACER-COSAS.
    33. .
    34. .
    35. .
    36. .
    37. .
    38. HACER-MAS-COSAS.
    39. .
    40. .
    41. .
    42. .
    43. FIN-HACER.
    44.     EXIT.

    Si cambias NEXT por PREVIOUS, leerá el fichero al revés y, cuando llegue al principio, (sentencia AT END), terminará la lectura, aunque, no todos los compiladores, soportan la cláusula de lectura inversa

    Un saludo y, si tienes más dudas, ya sabes por donde andamos.

    0 Not allowed!

  3. #3
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,294
    Última visita
    Ayer a las 11:19

    Agradecimientos
     
    Recibidos
    1,040
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    106 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @JonathanDemons_123, para la próxima vez publica también tu código, así te podremos ayudar mejor

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  4. #4
      Acabo de llegar...
    J

    Registrado
    enero de 2024
    Ubicación
    Oaxaca
    Mensajes
    4
    Última visita
    30.04.2024

    Agradecimientos
     
    Recibidos
    1
    Enviados
    1

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    Cita Iniciado por Josber Ver Mensaje
    Hola @JonathanDemons_123,

    A ver, sí, por supuesto que primero un START y después un READ, por lógica, primero posicionas el "puntero" en el lugar que quieres y después haces la lectura. Sin ver el código, te lee un sólo registro, porque haces un READ normal y corriente, y tienes que hacer el READ con un NEXT/PREVIOUS, en los que no hace falta incrementar nada, el propio compilador es el que se encarga de ir hacia adelante o hacia atrás de forma automática, (depende del parámetro usado), la manera más sencilla de hacerlo es:

    Vamos a suponer que tienes un fichero con 500 registros, numerados del 1 al 500 consecutivos y, que quieres leer a partir del registro 333 hasta el último:

    COBOL Código:
    1. WORKING-STORAGE SECTION.
    2. 01  EOF                    PIC 9.
    3. 01  STFILE                PIC XX.      *> FILE-STATUS del fichero
    4. .
    5. .
    6. .
    7. PROCEDURE DIVISION.
    8. INICIO.
    9.      MOVE 333 TO NUMKEY.
    10.      INITIALIZE EOF.
    11.      OPEN INPUT FICHERO.
    12.      PERFORM POSICIONAR.
    13.      PERFORM LEER UNTIL EOF = 1.
    14.      CLOSE FICHERO.
    15.      STOP RUN.
    16. POSICIONAR.
    17.      START FICHERO
    18.                KEY NOT LESS NUMKEY
    19.                      INVALID KEY DISPLAY "Error de posicionamiento... " STFILE
    20.                                   CLOSE FICHERO
    21.                                   STOP RUN
    22.      END-START.
    23. LEER.
    24.      READ FICHERO
    25.               NEXT RECORD
    26.                       AT END
    27.                           MOVE 1 TO EOF
    28.                           DISPLAY "Fin fichero ..."
    29.                       NOT AT END
    30.                              PERFORM HACER-COSAS THRU FIN-HACER
    31.      END-READ.
    32. HACER-COSAS.
    33. .
    34. .
    35. .
    36. .
    37. .
    38. HACER-MAS-COSAS.
    39. .
    40. .
    41. .
    42. .
    43. FIN-HACER.
    44.     EXIT.

    Si cambias NEXT por PREVIOUS, leerá el fichero al revés y, cuando llegue al principio, (sentencia AT END), terminará la lectura, aunque, no todos los compiladores, soportan la cláusula de lectura inversa

    Un saludo y, si tienes más dudas, ya sabes por donde andamos.
    Gracias hoy estuve practicando, estuve leyendo de la setencia de start y en la documentacion encontre que
    >
    >=
    <
    <=
    =
    !=
    Que solo hay estas opciones, pero ahi viendo como esta el archivo requiero una clase de Between, algo asi
    sea >= y <=
    ha cierto rango, se puede, con el start???

    O tendria que hacer doble start, es decir, uno que sea >= este seria el start1 y otro <= seria el start2???

    0 Not allowed!

  5. #5
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    802
    Última visita
    Hoy a las 18:22

    Agradecimientos
     
    Recibidos
    440
    Enviados
    365

    Citaciones y menciones
     
    Mentioned
    81 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    13 Post(s)
    Poder de Reputación
    37
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado
    ¡Solución!1 usuarios han marcado el post como Solución

    No, no existe el BETWEEN como en SQL por ejemplo, y tampoco puedes hacer un "doble START", porque prevalece siempre el último que hagas. La única manera de hacerlo es primero con un START >= y después, en el READ en la parte de NOT AT END, añades al principio el comparar el registro leído con el registro máximo, y si coincide o es superior, mover 1 a EOF, no sé si me explico bien.

    Un salu2.-

    0 Not allowed!

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas Similares

  1. No puedo crear un archivo indexado
    Por CHITOBLA en el foro GnuCOBOL (OpenCOBOL)
    Respuestas: 42
    Último Mensaje: 07.12.2022, 10:34
  2. [Sintaxis] Crear archivo indexado desde un XLS
    Por Anthony en el foro AcuCobol
    Respuestas: 10
    Último Mensaje: 06.08.2019, 17:35
  3. [Sintaxis] Lectura archivo secuencial
    Por Gatomalo en el foro PowerCOBOL V3L10 (Win32)
    Respuestas: 11
    Último Mensaje: 28.08.2018, 20:21
  4. [Sintaxis] Error de lectura en archivo
    Por jmeza en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 2
    Último Mensaje: 12.12.2017, 12:13
  5. [Sintaxis] Grabación/Lectura archivo de configuración
    Por Dasije en el foro WinDev
    Respuestas: 0
    Último Mensaje: 08.09.2016, 01:04

Etiquetas para este Tema

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •