Mostrando entradas con la etiqueta novatos. Mostrar todas las entradas
Mostrando entradas con la etiqueta novatos. Mostrar todas las entradas

miércoles, 30 de marzo de 2011

¿Qué es PL/I?

PL/I (Programming Language 1) es un lenguaje de programación de IBM (al igual que COBOL) que os podréis encontrar en muchos entornos HOST. Incluso si trabajáis en COBOL, es probable que alguna aplicación tenga código en PL/I y seguro que tenéis acceso al compilador.

Veamos las principales diferencias con COBOL:
  • No existe área A y área B. Existe un único área desde la columna 2 a la 72.
  • No hay divisiones ni secciones.
  • Acepta caracteres alfabéticos de la A a la Z (solo en mayúsuculas). Acepta los caracteres '@', '$', '#' ó 'Ñ' (según la instalación). Los números del 0 al 9. No acepta el guión '-' pero sí el guión bajo '_'.
  • Operadores lógicos: negación (¬), igualdad (=), conjunción (&), disyunción (|), mayor que (>), menor que (<).

  • No es necesario declarar las variables (aunque recomendable).

  • En pl/i no existen las palabras reservadas, sólo palabras CLAVE pero que pueden utilizarse como variables.

  • El final de una sentencia se termina con punto y coma (;) en lugar de con un punto (.), y además debe finalizarse cada sentencia, no vale con poner un ; al final de un procedimiento (como en COBOL que poníamos un . al final de párrafo).



Estas son a grandes rasgos las principales diferencias entre los dos lenguajes. En próximos artículos iremos viendo como codificar un programa PL/I, su estructura, como informar variables, como hacer bucles, etc.

Principiantes PL/I

Ahora que ya te habías hecho un experto en COBOL gracias al manual del Consultorio, resulta que a tu empresa se le ocurre cambiarte a un proyecto en PL/I.
¿¿¿Y ahora qué hago???

Que no cunda el pánico!! En el Consultorio Cobol estamos preparados para todo tipo de contratiempos. Con todos vosotros, el nuevo "manual de PL/I para principiantes"!

Manual de PL/I para principiantes

1. ¿Qué es PL/I?
  • Descripción del lenguaje de programación PL/I.
  • Diferencias principales con COBOL.

2. Esquema de un programa PL/I.
  • Esquema básico de un programa PL/I.
  • Declaración de variables en PL/I.

3. Proceso de un programa PL/I.
  • Informando variables: asignación de valores.
  • Inicializando variables: sentencia INIT.
  • Condiciones: IF/ELSE.
  • Bucles: DO WHILE, DO UNTIL, DO/TO.

4. Ficheros en PL/I.
  • Ficheros RECORD.
  • Ficheros STREAM.

5. Ejemplo 1: leer de SYSIN y escrbir en SYSPRINT (pl/i).
  • JCL que ejecuta un programa sin DB2.
  • Programa que realiza un GET de la SYSIN y un PUT de la información recibida para mostrarla por SYSPRINT.

Continuará...

miércoles, 26 de enero de 2011

Principiantes COBOL

Hola hola! Cansado de leer manuales de IBM en inglés? Harto de descargarte traducciones automáticas de google? No busques más!

En esta ocasión os traemos el "manual de COBOL para principiantes"!
El único, el inconfundible, el del Consultorio Cobol!

Habrás visto más, pero no mejores. Bienvenido.

Manual de COBOL para principiantes

1. Esquema de un programa cobol.
  • Secciones en que se divide todo programa cobol.

2. WORKING-STORAGE: definiendo variables.
  • Cálculo de longitudes.
  • Visualización de campos.

3. PROCEDURE DIVISION: proceso del programa.
  • Informando variables.
  • Inicializando campos.
  • Bucles y condiciones.

4. Ejemplo 1: Leer de SYSIN y escribir en SYSOUT.
  • JCL que ejecuta un programa sin DB2.
  • Programa que realiza un ACCEPT de la SYSIN y un DISPLAY de la información recibida para mostrarla por SYSOUT.

5. Ejemplo 2: leer de SYSIN y escribir en fichero.
  • JCL con 2 pasos: borrado de ficheros; ejecución de un programa sin DB2 con fichero de salida.
  • Programa que realiza un ACCEPT de la SYSIN y escribe la información recogida en un fichero de salida.

6. Ejemplo 3: leer de fichero y escribir en fichero.
  • JCL con 2 pasos: borrado de ficheros; ejecución de un programa sin DB2 con fichero de entrada y fichero de salida.
  • Programa que lee del fichero de entrada, formatea los datos, y escribe en el fichero de salida. Uso de las sentencias SEARCH y EVALUATE.

7. Ejemplo 4: generando un listado.
  • JCL con 3 pasos: borrado de ficheros; ordenación de un fichero, ejecución de un programa sin DB2 con fichero de entrada y fichero de salida tipo listado.
  • Programa que escribe un listado. Incluye control de número de líneas, paginación, etc.

8. Ejemplo 5: programa con DB2.
  • JCL que ejecuta un programa con DB2.
  • Descripción de la tabla DB2 a la que accederemos a través de una SELECT.
  • Programa con DB2 que accede a una tabla de nuestra base de datos a través de una SELECT. Control del SQLCODE.

9. Ejemplo 6: programa que llama a otro programa.
  • JCL que ejecuta un programa sin DB2.
  • Programa que llama a una rutina.
  • Rutina que calcula la letra del NIF a partir del número.

10. Ejemplo 7: ficheros VB (longitud variable)
  • JCL que ejecuta un programa sin DB2 y crea un fichero de longitud variable.
  • Programa que lee de un fichero de longitud fija (FB) y escribe un fichero de longitud variable (VB).

11. Ejemplo 8: ficheros VSAM
  • JCL que ejecuta un programa sin DB2 actualiza un fichero VSAM.
  • Programa que lee de 2 ficheros GDGs y graba en un fichero VSAM existente.

Continuará...

martes, 25 de enero de 2011

Esquema de un programa cobol

Los programas cobol se dividen en partes llamadas "DIVISION" que a su vez se separan en secciones llamadas "SECTION". Vamos a ver el esquema básico que todo programa cobol debe tener:

IDENTIFICATION DIVISION.
PROGRAM-ID. PRUEBA1.

   Nombre del programa. Debe coincidir con el nombre externo del programa.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
    DECIMAL-POINT IS COMMA.


   Nosotros usamos los puntos como separadores de miles y la coma como el separador de decimales.

INPUT-OUTPUT SECTION.
FILE-CONTROL.

   En esta parte se definen los ficheros en caso de que los haya.

    SELECT FICHERO1

   Nombre de fichero.

    ACCES MODE IS SEQUENTIAL

   Tipo de acceso: SEQUENTIAL para los planos, INDEXED para los indexados.

    FILE STATUS IS FS-FICHERO1

   Variable donde guardará el file-status (código de control de errores de acceso a ficheros).

DATA DIVISION.
FILE SECTION.
FD FICHERO1 RECORDING MODE IS F

   Fichero con longitud fija. Si fuese de longitud variable pondríamos V.

    BLOCK CONTAINS 0 RECORDS
    RECORD CONTAINS 129 CHARACTERS.

   Longitud del fichero.

01 REG-FICHERO1 PIC X(129).

   Donde guardaremos la información.

WORKING-STORAGE SECTION.

   En ella definimos las variables que usaremos en el programa.

01 WX-VARIABLE PIC X.

   Definición de variables lo veremos más adelante.

LINKAGE SECTION.

   Área de comunicación con otros programas

01 AREA-LINKAGE PIC X.
PROCEDURE DIVISION. / PROCEDURE DIVISION USING AREA-LINKAGE.

   Si hay un área definida en la linkage debemos incluir el USING en la procedure.

Aquí es donde va el programa en sí. La estructura general será:

0000-PRINCIPAL.
    PERFORM 1000-INICIO

    PERFORM 2000-PROCESO
      UNTIL CUMPLE-CONDICION

    PERFORM 3000-FINAL
    .


La numeración de párrafos suele ser esa, pero cada empresa puede tener su propia nomenclatura estándar.

El proceso en un programa se suele repetir n veces, hasta que se cumple la condición indicada en el UNTIL.

En el párrafo de final se incluye la instrucción de finalización de ejecución:
STOP RUN para programas principales.
GOBACK para rutinas.

Se pueden definir tantos párrafos como queramos, pero la estructura de todos ellos será la siguiente:

1000-INICIO.
    código con instrucciones a realizar
    .


Es decir, todos los párrafos terminan con un punto "." que indica el final de párrafo.

A tener en cuenta:
En cobol no podemos empezar a escribir donde queramos, pues cada cosa tiene su sitio^^
Un programa cobol mide de ancho 80 posiciones, aunque sólo escribiremos hasta la 72.

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
       01 WX-CAMPOS.
          05 WX-CAMPO1 PIC X.
          05 WX-LITERAL PIC X(40) VALUE 'LITERAL TAN GRANDE QUE NO CABE '
      -   'EN UNA LINEA Y LO TENEMOS QUE PARTIR'.
      *
       PROCEDURE DIVISION.
      ******************************************************************
       00000-PRINCIPAL.
      *
           PERFORM 10000-INICIO.


* De la posición 1 a la 6: no se codifica nada.
* Posición 7: se escribirá un * si queremos comentar la línea. En caso de que un texto no nos quepa en una línea, se escribirá en esta posición un guión "-" para continuarlo.
* De la posición 8 a la 11: se denomina área A. Aquí escribiremos las "divisiones" y "secciones", los niveles 01 y los descriptores de ficheros "FD".
* De la 12 a la 72: se denomina área B. Aquí se escribirán el resto de instrucciones del programa, y los niveles de variables subordinadas (02 en adelante).
* De la 73 a la 80: no se codifica nada.

Esto que acabamos de ver es algo muuuuy general, pero iremos viéndolo mejor con ejemplos.


Y hasta aquí la primera lección. En el siguiente artículo veremos la WORKING-STORAGE, donde se definen las varibles que vamos a usar a lo largo del programa. Veremos los diferentes tipos de variables, el cálculo de longitudes y como se visualizan en un fichero.