Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol COBOL - General
COBOL - General Discusiones de temática general sobre el lenguaje COBOL y todo lo relacionado con él.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Compilador] actualizar open cobol ide javiermorales GnuCOBOL (OpenCOBOL) 0 8 de noviembre de 2023 23:19
[Sintaxis] Actualizar libro de excel desde Powercobol dmosca PowerCOBOL (ActiveX, v4 - v11) 1 22 de agosto de 2020 15:14
[Sintaxis] Actualizar campo en una hoja de Excel orlando PowerCOBOL (ActiveX, v4 - v11) 1 17 de noviembre de 2019 21:57
[Sintaxis] Bloqueo de registros en un fichero Recato53 PowerCOBOL (ActiveX, v4 - v11) 2 21 de diciembre de 2018 13:53
[Sintaxis] Volcar registros de un fichero hacia varios CmText Breew PowerCOBOL (ActiveX, v4 - v11) 1 27 de febrero de 2015 15:44

Respuesta

  #1
Antiguo 12 de febrero de 2023, 00:03
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0
Predeterminado Agregar,actualizar registros en archivos indexados
0 Inactivo Inactivo

Hola gente recientemente me puse a practicar con archivos indexados, el programa que estoy intentando crear tiene la funcion de agarrar un archivo indexado al que se le desea actualizar y/o insertar nuevos registros
aca el codigo:
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.                ACTUALIZAR-STOCK.
  3.        DATE-WRITTEN.              10/2/2023.
  4.        AUTHOR.                    LUCAS GALEANO.
  5.  
  6.        ENVIRONMENT DIVISION.
  7.  
  8.        INPUT-OUTPUT SECTION.
  9.        FILE-CONTROL.
  10.            SELECT STOCK-MAESTRO ASSIGN TO "STOCK-MAESTRO.DAT"
  11.                                   ORGANIZATION IS INDEXED
  12.                                   RECORD KEY IS LLAVE-NUMERO-PRODUCTO
  13.                                   ACCESS MODE IS DYNAMIC.
  14.  
  15.            SELECT ENTRADAS-STOCK ASSIGN TO "STOCK-ENTRADAS.DAT"
  16.                                   ORGANIZATION IS INDEXED
  17.                                   RECORD KEY IS E-LLAVE-NUMERO-ENTRADA
  18.                                   ACCESS MODE IS DYNAMIC.
  19.  
  20.            SELECT STOCK-MAESTRO-ACT ASSIGN TO "STOCK-MAESTRO-ACT.DAT"
  21.                                   ORGANIZATION IS INDEXED
  22.                                   RECORD KEY IS N-LLAVE-NUMERO-ACT
  23.                                   ACCESS MODE IS DYNAMIC.
  24.        DATA DIVISION.
  25.        FILE SECTION.
  26.  
  27.        FD STOCK-MAESTRO.
  28.  
  29.        01 REG-PRODUCTOS.
  30.            88 FIN-ARCHIVO         VALUE HIGH-VALUE.
  31.            05 LLAVE-NUMERO-PRODUCTO PIC 99.
  32.            05 NOMBRE-PRODUCTO     PIC X(12).
  33.            05 CANTIDAD-INICIAL    PIC 9(3).
  34.            05 ENTRADA             PIC 9(3).
  35.            05 SALIDA              PIC 9(3).
  36.            05 TOTAL               PIC 9(3).
  37.            05 VALOR-VENTA         PIC 9(5).
  38.  
  39.        FD ENTRADAS-STOCK.
  40.  
  41.        01 REG-ENTRADA-PRODUCTOS.
  42.            88 FIN-ARCHIVO-ENTRADA VALUE HIGH-VALUE.
  43.            05 E-LLAVE-NUMERO-ENTRADA PIC 99.
  44.            05 E-NOMBRE-PRODUCTO   PIC X(12).
  45.            05 E-CANTIDAD-INICIAL  PIC 9(3).
  46.            05 E-ENTRADA           PIC 9(3).
  47.            05 E-SALIDA            PIC 9(3).
  48.            05 E-TOTAL             PIC 9(3).
  49.            05 E-VALOR-VENTA       PIC 9(5).
  50.  
  51.        FD STOCK-MAESTRO-ACT.
  52.  
  53.        01 REG-PRODUCTOS-ACT.
  54.            88 FIN-ARCHIVO-ACT VALUE HIGH-VALUE.
  55.            05 N-LLAVE-NUMERO-ACT PIC 99.
  56.            05 N-NOMBRE-PRODUCTO   PIC X(12).
  57.            05 N-CANTIDAD-INICIAL  PIC 9(3).
  58.            05 N-ENTRADA           PIC 9(3).
  59.            05 N-SALIDA            PIC 9(3).
  60.            05 N-TOTAL             PIC 9(3).
  61.            05 N-VALOR-VENTA       PIC 9(5).
  62.  
  63.        WORKING-STORAGE SECTION.
  64.        01 BOOLEANO                PIC XX.
  65.            88 WS-VERDADERO        VALUE "SI".
  66.            88 WS-FALSO            VALUE "NO".
  67.  
  68.        PROCEDURE DIVISION.
  69.        005-SALTAR.
  70.            DISPLAY "¿DESEAS VER EN PANTALLA EL STOCK ACTUALIZADO?".
  71.            ACCEPT BOOLEANO.
  72.        IF WS-VERDADERO
  73.            GO TO 045-IMPRIMIR-STOCK-PANTALLA
  74.        ELSE
  75.            EXIT
  76.        END-IF.
  77.  
  78.        010-ABRIR-ARCHIVOS.
  79.            OPEN INPUT STOCK-MAESTRO.
  80.            OPEN OUTPUT ENTRADAS-STOCK.
  81.            OPEN OUTPUT STOCK-MAESTRO-ACT.
  82.  
  83.        020-LEER-ARCHIVO.
  84.            READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  85.            END-READ.
  86.  
  87.        030-ESCRIBIR-ARCHIVO-ENTRADA.
  88.  
  89.            DISPLAY "INGRESE EL PRODUCTO USANDO LA SIGUIENTE PLANTILLA"
  90.                            " PARA FINALIZAR PRECIONE -ESPACIO-".
  91.            PERFORM 060-INGRESE-PRODUCTO.
  92.            PERFORM UNTIL REG-ENTRADA-PRODUCTOS = SPACES
  93.                WRITE REG-ENTRADA-PRODUCTOS
  94.                PERFORM 060-INGRESE-PRODUCTO
  95.            END-PERFORM.
  96.            CLOSE ENTRADAS-STOCK.
  97.  
  98.        040-ACTUALIZAR-ARCHIVO.
  99.            OPEN INPUT ENTRADAS-STOCK.
  100.            READ ENTRADAS-STOCK AT END SET FIN-ARCHIVO-ENTRADA TO TRUE
  101.            END-READ.
  102.            PERFORM UNTIL FIN-ARCHIVO AND FIN-ARCHIVO-ENTRADA
  103.      *>ESTE IF ACTUALIZA REGISTROS DE SER LA CLAVE LA MISMA DE NO SER ASI NO SE ACTUALIZA.
  104.  
  105.            IF LLAVE-NUMERO-PRODUCTO = E-LLAVE-NUMERO-ENTRADA
  106.                MOVE REG-ENTRADA-PRODUCTOS TO REG-PRODUCTOS-ACT
  107.                WRITE REG-PRODUCTOS-ACT
  108.                READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  109.                END-READ
  110.                READ ENTRADAS-STOCK AT END SET FIN-ARCHIVO-ENTRADA
  111.                                               TO TRUE
  112.                END-READ
  113.            ELSE
  114.                MOVE REG-PRODUCTOS TO REG-PRODUCTOS-ACT
  115.                WRITE REG-PRODUCTOS-ACT
  116.                READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  117.                END-READ
  118.            END-IF
  119.      *>ESTE IF AGREGA NUEVOS REGISTROS DE OTRO MODO NO LO HACE.
  120.  
  121.            IF E-LLAVE-NUMERO-ENTRADA < LLAVE-NUMERO-PRODUCTO
  122.                MOVE REG-ENTRADA-PRODUCTOS TO REG-PRODUCTOS-ACT
  123.                WRITE REG-PRODUCTOS-ACT
  124.                READ ENTRADAS-STOCK AT END SET FIN-ARCHIVO-ENTRADA
  125.                                               TO TRUE
  126.                END-READ
  127.            ELSE
  128.                MOVE REG-PRODUCTOS TO REG-PRODUCTOS-ACT
  129.                WRITE REG-PRODUCTOS-ACT
  130.                READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  131.            END-PERFORM.
  132.            PERFORM 050-CERRAR-ARCHIVOS.
  133.  
  134.        045-IMPRIMIR-STOCK-PANTALLA.
  135.            OPEN INPUT STOCK-MAESTRO-ACT.
  136.            READ STOCK-MAESTRO-ACT AT END SET FIN-ARCHIVO-ACT TO TRUE
  137.            END-READ.
  138.            PERFORM UNTIL FIN-ARCHIVO-ACT
  139.                DISPLAY REG-PRODUCTOS-ACT
  140.                READ STOCK-MAESTRO-ACT AT END SET FIN-ARCHIVO-ACT TO TRUE
  141.            END-READ
  142.            END-PERFORM.
  143.            CLOSE STOCK-MAESTRO-ACT
  144.            STOP RUN.
  145.  
  146.        050-CERRAR-ARCHIVOS.
  147.  
  148.            CLOSE STOCK-MAESTRO.
  149.            CLOSE ENTRADAS-STOCK.
  150.            CLOSE STOCK-MAESTRO-ACT.
  151.  
  152.  
  153.        060-INGRESE-PRODUCTO.
  154.            DISPLAY "NNPPPPPPPPPPPPIIIEEESSSTTT$$$$$".
  155.            ACCEPT REG-ENTRADA-PRODUCTOS.

Los problemas que estoy teniendo pues son de indole variados, tanto para insertar un registro nuevo como para actualizar, y en algunos casos encontre el motivo del problema pero no encuentro una manera optima de lograr lo que quiero lograr...cual es la manera correcta de lograr lo que busco?
Intente separar ambas acciones en dos performs diferentes cerrando los archivos antes de entrear al siguiente perform pero no dio resultados, aparecen otros problemas raros como que ninguna informacion pasa al nuevo archivo y se ve vacio..
Se que el problema es que esta intentando leer mas allá de algun archivo pero no se como arreglarlo, algunos archivos terminan de leerse antes y eso hace que todo se vuelva loco.

Acá dejo algunas capturas de resultados en consola

En esta captura intente actualizar la Key 02
[ATTACH=CONFIG]883[/ATTACH]

En esta captura logre insertar un nuevo registro Key 09
[ATTACH=CONFIG]884[/ATTACH]
[ATTACH=CONFIG]885[/ATTACH]

En esta otra captura se ve que intenté ingresar dos nuevos registros y me tira error en linea 130
[ATTACH=CONFIG]886[/ATTACH]

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  Sin título.png
Vistas: 42
Tamaño:  93,3 KB   Pulsar la imagen para la versión amplia
Nombre:  Sin sdtítulo.png
Vistas: 40
Tamaño:  61,3 KB   Pulsar la imagen para la versión amplia
Nombre:  Sin título.png
Vistas: 43
Tamaño:  17,9 KB  
Imágenes Adjuntas
 
Marengo97 is offline   Responder Con Cita
  #2
Antiguo 12 de febrero de 2023, 20:45
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@Marengo97, En el programa que pones hay muchas cosas. Para que te podamos ayudar dinos en que linea te da que problema porque hay muchas cosas.

Deberias de ordenar un poco las opciones para que quede mas claro lo que intentas hacer.

Por ejemplo.
Displaya un menu con opciones.
  1. Alta registro
  2. Modificación registro
  3. Eliminar registro
  4. Listar registros
  5. Salir

Y ya una vez seleccionado la opción hacer la opción indicada.

El manejo de ficheros indexados e diferente a uno sequencial.

Puedes leer un registro existente por su clave.

Código COBOL:
  1. read stock-maestro key is llave-numero-producto end-read

Puedes escribir un registro que no existe

Código COBOL:
  1. write reg-productos end-write

Puedes reescribir o actualizar un registro que ya existe

Código COBOL:
  1. rewrite reg-productos end-rewrite

Para hacer write o rewrite el fichero tiene que estar abierto asi

Código COBOL:
  1. open i-o stock-maesto

Puedes posicionarte en un registro y leer en secuencial

Código COBOL:
  1. start stock-maestro key is >  llave-numero-producto end-start
  2. read stock-maestro  at END SET FIN-ARCHIVO-ACT TO TRUE END-READ



Por ultimo te recomiendo que veas este tutorial que hace la gestión de un fichero indexado. Te pongo el link del hilo abierto.

- - - Updated - - -

[Información] Curso gratuito de GNU Cobol

Lenguaje COBOL desde 0 | IToo
JCantero is offline   Responder Con Cita
  #3
Antiguo 13 de febrero de 2023, 01:12
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0

Muchas gracias me re sirve, si, vi algo sobre el modo I-O pero no lo entendi muy bien por eso fui a por lo basico, inputs y outputs.
Si lo se no es muy ordenado..aun intento encontrar la manera de ser prolijo llevo un mes estudiando el lenguaje, se aprende poco a poco pero cuesta ser ordenado.
Marengo97 is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:17.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.