La clasificación, no cabe duda que es una opción muy interesante en según que programas o aplicaciones. El uso de tener varias claves alternadas sobre todo de nuestros archivos históricos nos evita tener que hacerlo muy a menudo, pero sobre todo con el uso de los ficheros maestros, es muy común el desar clasificar por cualquiera de los campos de los que dispone el fichero.
Para realizar estas clasificaciones, nuestro Cobol también dispone de lo suficiente. Podemos clasificar por todos los campos que deseemos, así como escoger el orden que queramos para cada uno de ellos. Todo esto queda englobado en la sentencia SORT, pero esta depende de muchas mas cosas.
No voy a explicar a fondo todo el funcionamiento de SORT, entre otras cosas, porque yo mismo no lo utilizo mucho, pero empecemos a despejar dudas.
Lo primero que necesitamos es un archivo sobre el que volcar nuestra clasificación y que además utilizará el propio SORT para hacer las clasificaciones. Este fichero se define en la FILE-CONTROL como cualquier otro fichero solo que haciendo ver al compilador que se va a tratar de un archivo SORT y a continuación se define su estructura en la FILE SECTION.
Para el ejemplo nos basaremos en el fichero de la Agenda que hemos visto en la sección «Programando».
El fichero de clasificación se llamará ORDEN y solo contendrá los campos por los que deseemos clasificar.
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT AGENDA ASSIGN TO RANDOM «AGENDA.DAT» ORGANIZATION INDEXED ACCESS DYNAMIC RECORD KEY KEYAGE. SELECT ORDEN ASSIGN TO SORT. SD ORDEN. |
Notad que hemos sustituido FD (File Descrition) por SD (Sort Description) para nuestro fichero de clasificación y que solo hemos incluido en éste fichero tres campos, los que nosotros hemos escogido para hacer las clasificaciones. Este archivo puede tener todos los campos que se desee, incluso otros que no estén en el fichero a clasificar. Además el orden en que figuren no tiene importancia ni significa nada a la hora de clasificar. Con la SD solo indicamos los campos que va a tener el fichero.
A partir de aquí, nuestro programa puede continuar normalmente hasta llegar al momento en que deseemos clasificar y para ello vamos a ver un poco como es la sintaxis de una sentencia SORT.
Formato 1:
-
- Este formato se utiliza para clasificar un archivo y guardar el contenido del fichero clasificado en otro archivo. Esta opción no se suele utilizar ya que tiene pocas posibilidades. Tendríamos un fichero en el que se basaría SORT para clasificar, un fichero maestro del que leeriamos para clasificar y el resultado lo guardaría en otro fichero.
SORT
fichero_de_clasificacion
(ON ASCENDING KEY)
campo
(ON DESCENDING KEY) campo
USING fichero a clasificar
GIVING fichero que quedará clasificado
Formato 2:
-
- Este formato es mas utilizado ya que el control de la clasificación lo hacemos nosotros tanto antes como después.
SORT
fichero_de_clasificacion
(ON ASCENDING KEY) campo
(ON DESCENDING KEY) campo
INPUT PROCEDURE que_hacemos antes
OUTPUT PROCEDURE que hacemos despues
-
- Fichero_de_clasificacion: hace referencia al fichero que hemos definido como SORT.
- campo: hace referencia a cualquiera de los campos de dicho fichero que hemos definido, podremos poner tantos como deseemos y en el orden que queramos.
- que hacemos antes: indica el proceso que obligaremos al compilador a realizar antes de clasificar. Podemos indicar varios parrafos como hariamos con un PERFORM indicando THRU o bien utilizar una SECTION.
- que hacemos despues: indicaremos que hacer una vez el fichero esté clasificado. Igual que antes podremos indicar un párrafo o varios o utilizar una SECTION.
Veamos a continuación un ejemplo con nuestro programa.
WORKING-STORAGE SECTION. 01 LINEA. 02 LNOM PIC X(30)BB. 02 LPOB PIC X(20)BB. 02 LPRO PIC X(12). 01 OP PIC X. … PROCEDURE DIVISION. INICIO. SORT ORDEN ON ASCENDING ORDPOB ON DESCENDING ORDNOM INPUT PROCEDURE CARGAR OUTPUT PROCEDURE SALIDA. STOP RUN. CARGAR SECTION. SALIDA SECTION. |
Antes de seguir, habréis notado que se han incluido dos nuevas sentencias, RELEASE y RETURN. Bien, estas instrucciones son las que utiliza Cobol para grabar y leer en los ficheros de SORT. El funcionamiento es el mismo, es decir RELEASE, lo que hace es introducir los datos en el fichero y RETURN los extrae. Además si os habéis dado cuenta, el fichero de clasificación no es necesario abrirlo ni cerrarlo.
En este caso hemos clasificado ascendentemente por poblacion y a su vez descendientemente por nombre. Podríamos haber utilizado cualquier otra forma o haber clasificado por los tres campos o solo por uno.
En la sección dedicada a la INPUT PROCEDURE simplemente hemos cargado el fichero de clasificación, pero a la vez podríamos haber discriminado registros del maestro y haber creado otros campos nuevos para clasificar. Aunque si bien es lo mas lógico a realizar.
En la sección dedicada a la OUTPUT PROCEDURE, lo que hacemos es sacar por pantalla apoyándonos en la variable LINEA, el contenido del fichero una vez clasificado, pero igualmente podríamos haber hecho cualquier cosa. Tened en cuenta que una vez aquí nuestro fichero ORDEN queda clasificado y por lo tanto podemos hacer lo que deseemos.