Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   RM/COBOL (https://www.cobolforo.es/forumdisplay.php?f=16)
-   -   [Sintaxis] Pasar CSV a texto plano (https://www.cobolforo.es/showthread.php?t=499)

theezraak 21 de octubre de 2016 10:44

Pasar CSV a texto plano
 
Buenos días, tengo un ejercicio de practica, y tengo que pasar de CSV a texto planto, con ciertos requisitos (2 campos ordenados en ascendente).
Y me da 1 error mi programa que es al abrir el fichero, pero no sé que más hacer.
Agradecería que alguien me lo explicara, un saludo.

Os dejo aquí el programita:
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CJ4.
  3.        ENVIRONMENT DIVISION.
  4.        CONFIGURATION SECTION.
  5.        SPECIAL-NAMES.
  6.             DECIMAL-POINT IS COMMA.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.             SELECT FICH1 ASSIGN TO 'APELLIDOS.csv'
  10.             ORGANIZATION IS LINE SEQUENTIAL
  11.             ACCESS MODE IS SEQUENTIAL.
  12.             SELECT FICH2 ASSIGN TO 'FICH2.DAT'
  13.             ORGANIZATION IS LINE SEQUENTIAL.
  14.             SELECT SORT-WORK ASSIGN TO SORTWORK.
  15.        DATA DIVISION.
  16.        FILE SECTION.
  17.  
  18.        FD   FICH1
  19.             RECORD CONTAINS 38 CHARACTERS.
  20.  
  21.        01 DATOS.
  22.            05 IDENTIFICADOR        PIC 9(07).
  23.            05 FILLER               PIC X.
  24.            05 APELLIDO             PIC X(20).
  25.            05 FILLER               PIC X.
  26.            05 REGION               PIC X(09).
  27.  
  28.        FD   FICH2
  29.             RECORD CONTAINS 38 CHARACTERS.
  30.  
  31.        01 DATOS-2.
  32.            05 IDENTIFICADOR-2      PIC 9(07).
  33.            05 FILLER               PIC X.
  34.            05 APELLIDO-2           PIC X(20).
  35.            05 FILLER               PIC X.
  36.            05 REGION-2             PIC X(09).
  37.  
  38.        SD  SORT-WORK
  39.             RECORD CONTAINS  38 CHARACTERS.
  40.  
  41.        01  SORT-WORK-RECORD.
  42.  
  43.            05 SW-APELLIDO          PIC 9(07).
  44.            05 FILLER               PIC X.
  45.            05 SW-REGION            PIC X(09).
  46.            05 FILLER               PIC X(21).
  47.  
  48.  
  49.        WORKING-STORAGE SECTION.
  50.        01   LINEA.
  51.            02   LIDEN              PIC 9(07)BB.
  52.            02   LAPELL             PIC X(20)BB.
  53.            02   LREG               PIC X(09).
  54.        01   OP                     PIC X.
  55.  
  56.        PROCEDURE DIVISION.
  57.        MAIN-PROCEDURE.
  58.  
  59.            PERFORM INICIALIZAR-FICHEROS
  60.            SORT SORT-WORK
  61.            ON ASCENDING KEY APELLIDO
  62.            ON ASCENDING KEY REGION
  63.            INPUT PROCEDURE CARGAR
  64.            OUTPUT PROCEDURE SALIDA
  65.                .
  66.      *----------------------------------------------------------------*
  67.        INICIALIZAR-FICHEROS.
  68.            OPEN INPUT  FICH1
  69.            OPEN OUTPUT FICH2
  70.                .
  71.        INICIALIZAR-FICHEROS-FIN.
  72.            EXIT.
  73.      *----------------------------------------------------------------*
  74.        CARGAR.
  75.            OPEN INPUT FICH1
  76.            PERFORM LEER
  77.            PERFORM FIN-FICH
  78.                .
  79.        CARGAR-FIN.
  80.            EXIT.
  81.      *----------------------------------------------------------------*
  82.        LEER.
  83.                READ FICH1 NEXT RECORD AT END GO FIN-FICH.
  84.                MOVE APELLIDO TO SW-APELLIDO.
  85.                MOVE REGION   TO SW-REGION.
  86.                RELEASE SORT-WORK-RECORD.
  87.        LEER-FIN.
  88.            EXIT.
  89.      *----------------------------------------------------------------*
  90.        FIN-FICH.
  91.            CLOSE FICH1.
  92.        FIN-FICH-FIN.
  93.            EXIT.
  94.      *----------------------------------------------------------------*
  95.        SALIDA.
  96.            PERFORM INICIAR-SALIDA.
  97.            PERFORM FIN-SALIDA.
  98.        SALIDA-FIN.
  99.            EXIT.
  100.      *----------------------------------------------------------------*
  101.        INICIAR-SALIDA.
  102.            RETURN SORT-WORK AT END GO FIN-SALIDA.
  103.            MOVE SW-APELLIDO TO APELLIDO-2.
  104.            MOVE SW-REGION   TO REGION-2.
  105.            DISPLAY LINEA LINE 20.
  106.            ACCEPT OP LINE 21.
  107.            GO INICIAR-SALIDA.
  108.        INICIAR-SALIDA-FIN.
  109.            EXIT.
  110.      
  111.       *----------------------------------------------------------------*  
  112.        FIN-SALIDA.
  113.            EXIT.
  114.        FIN-SALIDA-FIN.
  115.            EXIT.
  116.      *----------------------------------------------------------------*
  117.             CLOSE FICH1.
  118.             CLOSE FICH2.
  119.  
  120.             STOP RUN.
  121.        END PROGRAM CJ4.

Kuk 21 de octubre de 2016 11:19

theezraak, qué error te da exactamente? Si no te sale cual es, usa el FILE-STATUS y haz un DISPLAY para ver qué ocurre.

Además, para qué mantienes los FILLER en el fichero de salida? Si estás pasando a texto plano, no son necesarios.

theezraak 21 de octubre de 2016 11:36

Cita:

Citación del post de Kuk (Mensaje 2407)
theezraak, qué error te da exactamente? Si no te sale cual es, usa el FILE-STATUS y haz un DISPLAY para ver qué ocurre.

Además, para qué mantienes los FILLER en el fichero de salida? Si estás pasando a texto plano, no son necesarios.

Cabe destacar, que CSV es erroneo, es un DAT con formato CSV. Aún así me da error.
De pongo el error que me da:
Código:

Sort-merge key is not defined in record associated with sort

Kuk 21 de octubre de 2016 14:10

Cita:

Citación del post de theezraak (Mensaje 2408)
CSV es erroneo, es un DAT con formato CSV. Aún así me da error.

No me estoy enterando. CSV es simplemente una extensión de fichero. El formato en sí es texto plano, donde los datos van separados por punto y coma. No es como los doc/docx (que no son texto plano). Así que no entiendo por qué dices que es erróneo.

Por cierto, los párrafos XXXXX-FIN no sirven de nada si no haces PERFORM THRU. El THRU no es recomendado, por lo tanto los puedes suprimir (en vez de añadir los THRU XXXXX-FIN).

En realidad, yo nunca he usado el SORT interno, pero me parece que error viene de tus párrafos CARGAR y SALIDA. Son párrafos que están en un bucle implícito, no puede haber OPEN ni CLOSE dentro. Sólo hay que dejar las instrucciones que quieres que se ejecuten con cada iteración de lectura/escritura.

Hrmcobol 22 de octubre de 2016 03:44

Hola Amigo, este código lee un archivo y graba otro ordenado por dos campos. Saque y cambie algunas cosas, no recuerdo bien como era el tema del sort interno, pero si compila debería funcionar.

Coboleros si leen esto revisar por favor. Saludos a todos

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CJ4.
  3.        ENVIRONMENT DIVISION.
  4.        CONFIGURATION SECTION.
  5.        SPECIAL-NAMES.
  6.             DECIMAL-POINT IS COMMA.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.  
  10.             SELECT FICH1     ASSIGN TO 'FICH1.CSV'
  11.                              ORGANIZATION IS LINE SEQUENTIAL.
  12.  
  13.             SELECT FICH2     ASSIGN TO 'FICH2.DAT'
  14.                              ORGANIZATION IS LINE SEQUENTIAL.
  15.  
  16.             SELECT SORT-WORK ASSIGN TO SORTWORK.
  17.  
  18.        DATA DIVISION.
  19.        FILE SECTION.
  20.  
  21.        FD  FICH1
  22.            RECORD CONTAINS 38 CHARACTERS.
  23.        01  F1-FICH1.
  24.            05 F1-IDENTIFICADOR     PIC 9(07).
  25.            05    FILLER            PIC X.
  26.            05 F1-APELLIDO          PIC X(20).
  27.            05    FILLER            PIC X.
  28.            05 F1-REGION            PIC X(09).
  29.  
  30.        FD  FICH2
  31.            RECORD CONTAINS 38 CHARACTERS.
  32.        01  F2-FICH2.
  33.            05 F2-IDENTIFICADOR     PIC 9(07).
  34.            05    FILLER            PIC X.
  35.            05 F2-APELLIDO          PIC X(20).
  36.            05    FILLER            PIC X.
  37.            05 F2-REGION            PIC X(09).
  38.  
  39.        SD  SORT-WORK
  40.             RECORD CONTAINS  38 CHARACTERS.
  41.        01  SORT-WORK-RECORD.
  42.            05 SW-IDENTIFICADOR     PIC 9(07).
  43.            05    FILLER            PIC X.
  44.            05 SW-APELLIDO          PIC X(20).
  45.            05    FILLER            PIC X.
  46.            05 SW-REGION            PIC X(09).
  47.  
  48.  
  49.        WORKING-STORAGE SECTION.
  50.  
  51.        PROCEDURE DIVISION.
  52.        MAIN-PROCEDURE SECTION.
  53.  
  54.            PERFORM INICIALIZAR-FICHEROS
  55.            SORT SORT-WORK
  56.                 ON ASCENDING KEY SW-APELLIDO
  57.                 ON ASCENDING KEY SW-REGION
  58.            INPUT  PROCEDURE CARGAR   *> Me parece que los Procedure deben ser Section
  59.            OUTPUT PROCEDURE SALIDA.  *> y una section termina en otra section
  60.            
  61.            STOP RUN.
  62.      *----------------------------------------------------------------*
  63.        END PROGRAM CJ4.
  64.      *----------------------------------------------------------------*
  65.        CARGAR SECTION.
  66.            OPEN INPUT FICH1
  67.            PERFORM LEER THRU LEER-FIN
  68.            CLOSE FICH1.
  69.        CARGAR-FIN SECTION.
  70.            EXIT.
  71.      *----------------------------------------------------------------*
  72.        LEER.
  73.            READ FICH1 NEXT RECORD AT END GO LEER-FIN.
  74.            MOVE F1-IDENTIFICADOR TO SW-IDENTIFICADOR.
  75.            MOVE F1-APELLIDO      TO SW-APELLIDO.
  76.            MOVE F1-REGION        TO SW-REGION.
  77.            RELEASE SORT-WORK-RECORD.
  78.            GO TO LEER.
  79.        LEER-FIN.
  80.            EXIT.
  81.      *----------------------------------------------------------------*
  82.        SALIDA SECTION.
  83.            OPEN OUTPUT FICH2
  84.            PERFORM INICIAR-SALIDA.
  85.            CLOSE FICH2
  86.        SALIDA-FIN SECTION.
  87.            EXIT.
  88.      *----------------------------------------------------------------*
  89.        INICIAR-SALIDA.
  90.            RETURN SORT-WORK AT END GO INICIAR-SALIDA-FIN.
  91.            MOVE SW-IDENTIFICADOR TO F2-IDENTIFICADOR.
  92.            MOVE SW-APELLIDO      TO F2-APELLIDO.
  93.            MOVE SW-REGION        TO F2-REGION.
  94.            WRITE F2-FICH2.
  95.            GO TO INICIAR-SALIDA.
  96.        INICIAR-SALIDA-FIN.
  97.            EXIT.
  98.      *----------------------------------------------------------------*
  99.    

theezraak 24 de octubre de 2016 08:45

Cita:

Citación del post de Kuk (Mensaje 2409)
No me estoy enterando. CSV es simplemente una extensión de fichero. El formato en sí es texto plano, donde los datos van separados por punto y coma. No es como los doc/docx (que no son texto plano). Así que no entiendo por qué dices que es erróneo.

Por cierto, los párrafos XXXXX-FIN no sirven de nada si no haces PERFORM THRU. El THRU no es recomendado, por lo tanto los puedes suprimir (en vez de añadir los THRU XXXXX-FIN).

En realidad, yo nunca he usado el SORT interno, pero me parece que error viene de tus párrafos CARGAR y SALIDA. Son párrafos que están en un bucle implícito, no puede haber OPEN ni CLOSE dentro. Sólo hay que dejar las instrucciones que quieres que se ejecuten con cada iteración de lectura/escritura.

Por lo que conseguí el viernes, era error mio, no era csv era .dat
Ahora solo me graba 1 registro, poco a poco.

---------- Post añadido : 08:45 ---------- Post anterior : 08:43 ----------

Cita:

Citación del post de Hrmcobol (Mensaje 2410)
Hola Amigo, este código lee un archivo y graba otro ordenado por dos campos. Saque y cambie algunas cosas, no recuerdo bien como era el tema del sort interno, pero si compila debería funcionar.

Coboleros si leen esto revisar por favor. Saludos a todos

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CJ4.
  3.        ENVIRONMENT DIVISION.
  4.        CONFIGURATION SECTION.
  5.        SPECIAL-NAMES.
  6.             DECIMAL-POINT IS COMMA.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.  
  10.             SELECT FICH1     ASSIGN TO 'FICH1.CSV'
  11.                              ORGANIZATION IS LINE SEQUENTIAL.
  12.  
  13.             SELECT FICH2     ASSIGN TO 'FICH2.DAT'
  14.                              ORGANIZATION IS LINE SEQUENTIAL.
  15.  
  16.             SELECT SORT-WORK ASSIGN TO SORTWORK.
  17.  
  18.        DATA DIVISION.
  19.        FILE SECTION.
  20.  
  21.        FD  FICH1
  22.            RECORD CONTAINS 38 CHARACTERS.
  23.        01  F1-FICH1.
  24.            05 F1-IDENTIFICADOR     PIC 9(07).
  25.            05    FILLER            PIC X.
  26.            05 F1-APELLIDO          PIC X(20).
  27.            05    FILLER            PIC X.
  28.            05 F1-REGION            PIC X(09).
  29.  
  30.        FD  FICH2
  31.            RECORD CONTAINS 38 CHARACTERS.
  32.        01  F2-FICH2.
  33.            05 F2-IDENTIFICADOR     PIC 9(07).
  34.            05    FILLER            PIC X.
  35.            05 F2-APELLIDO          PIC X(20).
  36.            05    FILLER            PIC X.
  37.            05 F2-REGION            PIC X(09).
  38.  
  39.        SD  SORT-WORK
  40.             RECORD CONTAINS  38 CHARACTERS.
  41.        01  SORT-WORK-RECORD.
  42.            05 SW-IDENTIFICADOR     PIC 9(07).
  43.            05    FILLER            PIC X.
  44.            05 SW-APELLIDO          PIC X(20).
  45.            05    FILLER            PIC X.
  46.            05 SW-REGION            PIC X(09).
  47.  
  48.  
  49.        WORKING-STORAGE SECTION.
  50.  
  51.        PROCEDURE DIVISION.
  52.        MAIN-PROCEDURE SECTION.
  53.  
  54.            PERFORM INICIALIZAR-FICHEROS
  55.            SORT SORT-WORK
  56.                 ON ASCENDING KEY SW-APELLIDO
  57.                 ON ASCENDING KEY SW-REGION
  58.            INPUT  PROCEDURE CARGAR   *> Me parece que los Procedure deben ser Section
  59.            OUTPUT PROCEDURE SALIDA.  *> y una section termina en otra section
  60.            
  61.            STOP RUN.
  62.      *----------------------------------------------------------------*
  63.        END PROGRAM CJ4.
  64.      *----------------------------------------------------------------*
  65.        CARGAR SECTION.
  66.            OPEN INPUT FICH1
  67.            PERFORM LEER THRU LEER-FIN
  68.            CLOSE FICH1.
  69.        CARGAR-FIN SECTION.
  70.            EXIT.
  71.      *----------------------------------------------------------------*
  72.        LEER.
  73.            READ FICH1 NEXT RECORD AT END GO LEER-FIN.
  74.            MOVE F1-IDENTIFICADOR TO SW-IDENTIFICADOR.
  75.            MOVE F1-APELLIDO      TO SW-APELLIDO.
  76.            MOVE F1-REGION        TO SW-REGION.
  77.            RELEASE SORT-WORK-RECORD.
  78.            GO TO LEER.
  79.        LEER-FIN.
  80.            EXIT.
  81.      *----------------------------------------------------------------*
  82.        SALIDA SECTION.
  83.            OPEN OUTPUT FICH2
  84.            PERFORM INICIAR-SALIDA.
  85.            CLOSE FICH2
  86.        SALIDA-FIN SECTION.
  87.            EXIT.
  88.      *----------------------------------------------------------------*
  89.        INICIAR-SALIDA.
  90.            RETURN SORT-WORK AT END GO INICIAR-SALIDA-FIN.
  91.            MOVE SW-IDENTIFICADOR TO F2-IDENTIFICADOR.
  92.            MOVE SW-APELLIDO      TO F2-APELLIDO.
  93.            MOVE SW-REGION        TO F2-REGION.
  94.            WRITE F2-FICH2.
  95.            GO TO INICIAR-SALIDA.
  96.        INICIAR-SALIDA-FIN.
  97.            EXIT.
  98.      *----------------------------------------------------------------*
  99.    

Hola, gracias por la ayudita. Con ese codigo, y habiendole hecho unas modis, me da error en el Cargar section, es necesario poner SECTION cuando se usa el SORT?
Un saludo!

JCantero 24 de octubre de 2016 09:27

Lo primero: La definicion del fichero para hacer el sort.
o defines la variable sortwork o bien la pones como una constante entre
comillas. Asi:

Código COBOL:
  1. SELECT SORT-WORK ASSIGN TO 'SORTWORK'.


Segundo, quita lo de las "SECTION' no son necesarias. Pero si las utilizas no puedes llamar a procedimientos que estan fuera de la 'SECTION'. Mejor quitalas.


Tercero, inicalizar-ficheros no lo tienes implementado.

Cuarto , END-PROGRAM ponlo al final o quitalo. No hace falta

Quinto, CLOSE FICH2 pon el punto porque es final de parrafo CLOSE FICH2.

sexto, quita los exit.

septimo cambia "PERFORM INICIAR-SALIDA" por "PERFORM INICIAR-SALIDA thru iniciar-salida-fin".

Ya con eso, compila y nos cuentas.

Saludos

---------- Post añadido : 09:24 ---------- Post anterior : 09:16 ----------

Te quedaria asi:

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CJ4.
  3.        ENVIRONMENT DIVISION.
  4.        CONFIGURATION SECTION.
  5.        SPECIAL-NAMES.
  6.             DECIMAL-POINT IS COMMA.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.  
  10.             SELECT FICH1     ASSIGN TO 'FICH1.CSV'
  11.                              ORGANIZATION IS LINE SEQUENTIAL.
  12.  
  13.             SELECT FICH2     ASSIGN TO 'FICH2.DAT'
  14.                              ORGANIZATION IS LINE SEQUENTIAL.
  15.  
  16.             SELECT SORT-WORK ASSIGN TO 'SORTWORK'.
  17.  
  18.        DATA DIVISION.
  19.        FILE SECTION.
  20.  
  21.        FD  FICH1
  22.            RECORD CONTAINS 38 CHARACTERS.
  23.        01  F1-FICH1.
  24.            05 F1-IDENTIFICADOR     PIC 9(07).
  25.            05    FILLER            PIC X.
  26.            05 F1-APELLIDO          PIC X(20).
  27.            05    FILLER            PIC X.
  28.            05 F1-REGION            PIC X(09).
  29.  
  30.        FD  FICH2
  31.            RECORD CONTAINS 38 CHARACTERS.
  32.        01  F2-FICH2.
  33.            05 F2-IDENTIFICADOR     PIC 9(07).
  34.            05    FILLER            PIC X.
  35.            05 F2-APELLIDO          PIC X(20).
  36.            05    FILLER            PIC X.
  37.            05 F2-REGION            PIC X(09).
  38.  
  39.        SD  SORT-WORK
  40.             RECORD CONTAINS  38 CHARACTERS.
  41.        01  SORT-WORK-RECORD.
  42.            05 SW-IDENTIFICADOR     PIC 9(07).
  43.            05    FILLER            PIC X.
  44.            05 SW-APELLIDO          PIC X(20).
  45.            05    FILLER            PIC X.
  46.            05 SW-REGION            PIC X(09).
  47.  
  48.  
  49.        WORKING-STORAGE SECTION.
  50.  
  51.        PROCEDURE DIVISION.
  52.        MAIN-PROCEDURE.
  53.  
  54.       *     PERFORM INICIALIZAR-FICHEROS
  55.            SORT SORT-WORK
  56.                 ON ASCENDING KEY SW-APELLIDO
  57.                 ON ASCENDING KEY SW-REGION
  58.            INPUT  PROCEDURE CARGAR  
  59.            OUTPUT PROCEDURE SALIDA.  
  60.            
  61.            STOP RUN.
  62.      *----------------------------------------------------------------*
  63.      * END PROGRAM CJ4.
  64.      *----------------------------------------------------------------*
  65.        CARGAR.
  66.            OPEN INPUT FICH1
  67.            PERFORM LEER THRU LEER-FIN
  68.            CLOSE FICH1.
  69.        CARGAR-FIN.
  70.            EXIT.
  71.      *----------------------------------------------------------------*
  72.        LEER.
  73.            READ FICH1 NEXT RECORD AT END GO LEER-FIN.
  74.            MOVE F1-IDENTIFICADOR TO SW-IDENTIFICADOR.
  75.            MOVE F1-APELLIDO      TO SW-APELLIDO.
  76.            MOVE F1-REGION        TO SW-REGION.
  77.            RELEASE SORT-WORK-RECORD.
  78.            GO TO LEER.
  79.        LEER-FIN.
  80.      *----------------------------------------------------------------*
  81.        SALIDA.
  82.            OPEN OUTPUT FICH2
  83.            PERFORM INICIAR-SALIDA thru iniciar-salida-fin.
  84.            CLOSE FICH2.
  85.        SALIDA-FIN.
  86.      *----------------------------------------------------------------*
  87.        INICIAR-SALIDA.
  88.            RETURN SORT-WORK AT END GO INICIAR-SALIDA-FIN.
  89.            MOVE SW-IDENTIFICADOR TO F2-IDENTIFICADOR.
  90.            MOVE SW-APELLIDO      TO F2-APELLIDO.
  91.            MOVE SW-REGION        TO F2-REGION.
  92.            WRITE F2-FICH2.
  93.            GO TO INICIAR-SALIDA.
  94.        INICIAR-SALIDA-FIN.
  95.      *----------------------------------------------------------------*
  96.    


---------- Post añadido : 09:27 ---------- Post anterior : 09:24 ----------

Lo he probado:

fichero csv

Código COBOL:
  1. 12     jsjjsj
  2. 1      4324
  3. 1      1111
  4.  

fichero dat

Código COBOL:
  1.  
  2. 1       111
  3. 1       324
  4. 12      sjjsj

Kuk 24 de octubre de 2016 09:39

JCantero, los párrafos de XXXX-FIN no sirven de nada tampoco. Además, muchos compiladores no compilan un párrafo vacío, así que el EXIT se convierte en obligatorio.

Las SECTION, los párrafos con -FIN y el THRU no son recomendados, yo no los uso nunca. Los puntos tampoco. El único punto obligatorio es el del final del párrafo. Los GO TO tampoco son recomendados, suelen ser prohibidos por estándar. Es preferible usar los PERFORM.

theezraak 24 de octubre de 2016 11:01

Cita:

Citación del post de Kuk (Mensaje 2418)
JCantero, los párrafos de XXXX-FIN no sirven de nada tampoco. Además, muchos compiladores no compilan un párrafo vacío, así que el EXIT se convierte en obligatorio.

Las SECTION, los párrafos con -FIN y el THRU no son recomendados, yo no los uso nunca. Los puntos tampoco. El único punto obligatorio es el del final del párrafo. Los GO TO tampoco son recomendados, suelen ser prohibidos por estándar. Es preferible usar los PERFORM.

Uso el fin porque me va bien para situarme.
Te pongo el codigo que tengo ahora, de momento ahora me da 1 error al leer el fichero.
Un saludo y gracias!
Código COBOL:
  1.  IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CJ4.
  3.        ENVIRONMENT DIVISION.
  4.        CONFIGURATION SECTION.
  5.        SPECIAL-NAMES.
  6.             DECIMAL-POINT IS COMMA.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.  
  10.             SELECT FICH1     ASSIGN TO 'APELLIDO.DAT'
  11.                              ORGANIZATION IS LINE SEQUENTIAL.
  12.  
  13.             SELECT FICH2     ASSIGN TO 'FICH2.DAT'
  14.                              ORGANIZATION IS LINE SEQUENTIAL.
  15.  
  16.             SELECT SORT-WORK ASSIGN TO SORTWORK.
  17.  
  18.        DATA DIVISION.
  19.        FILE SECTION.
  20.  
  21.        FD  FICH1
  22.            RECORD CONTAINS 38 CHARACTERS.
  23.        01  F1-FICH1.
  24.            05 F1-IDENTIFICADOR     PIC 9(07).
  25.            05    FILLER            PIC X.
  26.            05 F1-APELLIDO          PIC X(20).
  27.            05    FILLER            PIC X.
  28.            05 F1-REGION            PIC X(09).
  29.  
  30.        FD  FICH2
  31.            RECORD CONTAINS 38 CHARACTERS.
  32.        01  F2-FICH2.
  33.            05 F2-IDENTIFICADOR     PIC 9(07).
  34.            05    FILLER            PIC X.
  35.            05 F2-APELLIDO          PIC X(20).
  36.            05    FILLER            PIC X.
  37.            05 F2-REGION            PIC X(09).
  38.  
  39.        SD  SORT-WORK
  40.             RECORD CONTAINS  38 CHARACTERS.
  41.        01  SORT-WORK-RECORD.
  42.            05 SW-IDENTIFICADOR     PIC 9(07).
  43.            05    FILLER            PIC X.
  44.            05 SW-APELLIDO          PIC X(20).
  45.            05    FILLER            PIC X.
  46.            05 SW-REGION            PIC X(09).
  47.  
  48.  
  49.        WORKING-STORAGE SECTION.
  50.  
  51.        PROCEDURE DIVISION.
  52.        MAIN-PROCEDURE.
  53.            SORT SORT-WORK
  54.            ON ASCENDING KEY SW-APELLIDO
  55.            ON ASCENDING KEY SW-REGION
  56.            INPUT  PROCEDURE CARGAR
  57.            OUTPUT PROCEDURE SALIDA.
  58.            STOP RUN.
  59.      *----------------------------------------------------------------*
  60.        CARGAR SECTION.
  61.            OPEN INPUT FICH1.
  62.            PERFORM LEER.
  63.        LEER.
  64.            READ FICH1 AT END PERFORM FIN-LEER.
  65.            MOVE F1-IDENTIFICADOR TO SW-IDENTIFICADOR.
  66.            MOVE F1-APELLIDO      TO SW-APELLIDO.
  67.            MOVE F1-REGION        TO SW-REGION.
  68.            RELEASE SORT-WORK-RECORD.
  69.            PERFORM LEER.
  70.            
  71.        FIN-LEER.
  72.            CLOSE FICH1.
  73.        FIN-LEER-FIN.
  74.            EXIT.
  75.      *----------------------------------------------------------------*
  76.        SALIDA SECTION.
  77.            OPEN OUTPUT FICH2.
  78.            PERFORM INICIAR-SALIDA.
  79.            CLOSE FICH2.
  80.        INICIAR-SALIDA.
  81.            RETURN SORT-WORK AT END GO INICIAR-SALIDA-FIN.
  82.            MOVE SW-IDENTIFICADOR TO F2-IDENTIFICADOR.
  83.            MOVE SW-APELLIDO      TO F2-APELLIDO.
  84.            MOVE SW-REGION        TO F2-REGION.
  85.            WRITE F2-FICH2.
  86.            PERFORM INICIAR-SALIDA.
  87.        INICIAR-SALIDA-FIN.
  88.            EXIT.
  89.      *----------------------------------------------------------------*
  90.        END PROGRAM CJ4.
  91.      *----------------------------------------------------------------*

theezraak, usa el resalto de sintaxis!

---------- Post añadido : 11:01 ---------- Post anterior : 10:12 ----------

Ya me funciona gracias al codigo de JCantero.
La verdad que parecía más facil de lo que era.
Muchas gracias a todos por las aportaciones!!!


La franja horaria es GMT +2. Ahora son las 15:38.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.