Ver Mensaje Individual
  #4
Antiguo 2 de julio de 2016, 17:44
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 21.09.2026 07:20
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Aquí, tienes un sencillo ejemplo, lo he escrito directamente, así es que puede que tenga errores y no compile bien, pero aunque sintácticamente no funcione, la lógica de programación es correcta.

Código COBOL:
  1. IDENTIFICATION DIVISION.
  2.  
  3. ENVIRONMENT DIVISION.
  4. CONFIGURATION SECTION.
  5. SPECIAL-NAMES.
  6.      DECIMAL-POINT IS COMMA.
  7. INPUT-OUTPUT SECTION.
  8. FILE-CONTROL.
  9.      SELECT OPTIONAL ORIGEN ASSIGN TO "C:\ORIGEN.DAT"
  10.             ORGANIZATION IS INDEXED
  11.             ACCESS MODE IS DYNAMIC
  12.             RECORD KEY IS NUMERO
  13.             STATUS IS STORI
  14.      SELECT OPTIONAL DESTINO ASSIGN TO "C:\DESTINO.TXT"
  15.             ORGANIZATION IS LINE SEQUENTIAL
  16.             STATUS IS STDES.
  17.  
  18. DATA DIVISION.
  19.  
  20. FILE SECTION.
  21. FD  ORIGEN GLOBAL.
  22. 01  REG-ORI.
  23.     03  DATOS.
  24.         05  NUMERO              PIC 9(5).
  25.         05  NOMBRE              PIC X(50).
  26.         05  DIREC               PIC X(50).
  27.         05  CP                  PIC X(5).
  28.         05  POB                 PIC X(30).
  29.     03  ECO.
  30.         05  ACUM1               PIC S9(9)V999 COMP-5.
  31.         05  ACTIVO              PIC X.
  32.         05  ACUM2               PIC S9(9)V999 BINARY.
  33.         05  ACUM3               PIC S9(9)V999.
  34.  
  35. FD  DESTINO GLOBAL
  36.     LABEL RECORD IS STANDARD.
  37. 01  LINEA                       PIC X(255).
  38.  
  39. WORKING-STORAGE SECTION.
  40. 01  STDES                       PIC XX.
  41. 01  STORI                       PIC XX.
  42. 01  P                           PIC 999 BINARY.
  43. 01  WSEP                        PIC X VALUE "|".    *> Lo vamos a utilizar como separador de campos.
  44. 01  CINCO-EDI                   PIC ZZ.ZZ9.
  45. 01  NUEVE-EDI                   PIC --.---.---.---,---.
  46. 01  CONTA                       PIC 9(5).
  47.  
  48. PROCEDURE DIVISION.
  49.  
  50. INICIO.
  51.     OPEN INPUT ORIGEN.
  52.     OPEN OUTPUT DESTINO.
  53. POSICIONAR.
  54.     MOVE 0 TO NUMERO  CONTA.
  55.     START ORIGEN KEY NOT LESS NUMERO
  56.           INVALID KEY
  57.                   INVOKE POW-SELF "DisplayMessage"
  58.                          USING "*Error, el fichero está vacío ..."
  59.                                "*ERROR"
  60.                                POW-DMICONERROR
  61.                   END-INVOKE
  62.                   INVOKE POW-SELF "CloseForm"
  63.                   EXIT PROGRAM
  64.     END-START.
  65. LEER.
  66.     READ ORIGEN NEXT RECORD
  67.          AT END
  68.             GO FIN-LEER
  69.     END-READ.
  70.    
  71.     PERFORM MONTAR-LINEA THRU FIN-MONTAR.
  72.    
  73.     GO LEER.
  74.  
  75. FIN-LEER.
  76.     MOVE CONTA TO CINCO-EDI.
  77.     MOVE SPACES TO LINEA.
  78.    
  79.     STRING "Fin del traspaso. Se han pasado "
  80.            CINCO-EDI
  81.            " Registros." DELIMITED BY SIZE INTO LINEA
  82.     END-STRING.
  83.    
  84.     INVOKE POW-SELF "DisplayMessage"
  85.            USING LINEA
  86.                  "Información"
  87.                  POW-DMICONINFORMATION
  88.     END-INVOKE
  89.    
  90.     CLOSE ORIGEN DESTINO.
  91.     INVOKE POW-SELF "CloseForm".
  92.     EXIT PROGRAM.
  93.  
  94. MONTAR-LINEA.
  95.     MOVE 0 TO CINCO-EDI NUEVE-EDI P.
  96.     MOVE SPACES TO LINEA.
  97.    
  98.     MOVE NUMERO TO CINCO-EDI.
  99.    
  100.     STRING CINCO-EDI
  101.            WSEP
  102.            NOMBRE
  103.            WSEP
  104.            DIREC
  105.            WSEP
  106.            CP
  107.            WSEP
  108.            POB
  109.            WSEP DELIMITED BY SIZE INTO LINEA
  110.     END-STRING.
  111.  
  112.     *>
  113.    *> ---- Buscamos el tamaño total almacenado para poder hacer el siguiente string
  114.    *>
  115.        
  116.     COMPUTE P = FUNCTION STORED-CHAR-LENGTH (LINEA) + 1.
  117.  
  118.     *>
  119.    *> ---- Después, ya no nos hace falta saber el tamaño, porque se guarda automáticamente en el "puntero" P
  120.    *>
  121.    
  122.     MOVE ACUM1 TO NUEVE-EDI.
  123.    
  124.     STRING ACUM1
  125.            WSEP
  126.            ACTIVO
  127.            WSEP DELIMITED BY SIZE INTO LINEA WITH POINTER P
  128.     END-STRING.
  129.    
  130.     MOVE ACUM2 TO NUEVE-EDI.
  131.    
  132.     STRING ACUM2
  133.            WSEP DELIMITED BY SIZE INTO LINEA WITH POINTER P
  134.     END-STRING.
  135.    
  136.     MOVE ACUM2 TO NUEVE-EDI.
  137.    
  138.     STRING ACUM3
  139.            DELIMITED BY SIZE INTO LINEA WITH POINTER P
  140.     END-STRING.
  141.    
  142.     WRITE LINEA.
  143.  
  144.     ADD 1 TO CONTA.
  145. FIN-MONTAR.
  146.     EXIT.

Si hay algo que no entiendas, no dudes en preguntar.

Un saludo.-
Josber is offline   Responder Con Cita