Pequeño Editor Texto
Muchos de los trucos que veamos, no tienen porque ser programas completos, pero si nos pueden ayudar a comprender mejor la lógica de algunos de ellos y aprovechar el código para otros casos.

Ahora vamos a hacer un pequeño editor de texto, el cual nos cuente las palabras que vayamos introduciendo y además nos diga el número de carácteres que tiene.

Os muestro una captura de pantalla.

Pequeño editor

    Empezamos definiendo el programa y las variables que vamos a utilizar.

      IDENTIFICATION DIVISION.
      PROGRAM-ID. EDITOR.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SOURCE-COMPUTER. COBOL.
      OBJECT-COMPUTER. COBOL.
      SPECIAL-NAMES.  DECIMAL-POINT IS COMMA.
      INPUT-OUTPUT SECTION.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
    (donde se guardara la palabra introducida).
      01  PALABRA PIC X(20).
      01  PALABRI REDEFINES PALABRA.
           02  ELE PIC X OCCURS 20 TIMES.
    (li = contador de letras de la palabra).
      01  LI           PIC 99.
    (linea = contador de lineas donde aparecen las palabras introducidas.
      01  LINEA      PIC 99.
    (colum1 = contador de columna de palabra introducida).
      01  COLUM1 PIC 99.
    (colum2 = contador de columna de numero de letras de palabra introducida).
      01  COLUM2  PIC 99.
    (lin = linea por la que se va escribiendo).
      01  LIN  PIC 99.
    (coli = columna por la que se va escribiendo).
      01  COLI PIC 99.
    (total = numero de palabras introducidas).
     01  TOTAL PIC 999.
      01  LTOTAL PIC ZZ9.
    (x = letra que vamos introduciendo).
      01  X PIC X.
      01  RAYA.
           02  FILLER PIC X(30) VALUE "------------------------------".
           02  FILLER PIC X(25) VALUE "-------------------------".
      01  ESCA PIC 9 COMP-1.
      PROCEDURE DIVISION.
    (en este primer parrafo vamos a diseñar un poco la pantalla).
      INICIO.
           DISPLAY RAYA LINE  2 COL 2 ERASE.
           DISPLAY RAYA LINE 15 COL 2.
           DISPLAY RAYA LINE 17 COL 2.
           DISPLAY "BORRA CARACTER" LINE 16 COL 20 LOW REVERSE.
           DISPLAY " FINALIZAR" LINE 16 COL 42 LOW REVERSE.
           DISPLAY ">> " LINE 16 COL 2.
           DISPLAY " INTRODUCIR TEXTO " LINE 2 COL 5 LOW REVERSE.
           DISPLAY "---------------------" LINE 2 COL 59.
           DISPLAY " PALABRAS " LINE 2 COL 62 LOW REVERSE.
           DISPLAY " PALABRAS " LINE 17 COL 5 LOW REVERSE.
    (aqui inicializamos las variables con las que vamos a trabajar en la Working están explicadas).
           MOVE 18 TO LINEA MOVE 3 TO COLUM1 MOVE 23 TO COLUM2.
           MOVE 3 TO LIN MOVE 2 TO COLI MOVE 0 TO LI TOTAL.
      UNO.
    (aceptamos un caracter cada vez, lo analizamos y actuamos en consecuencia).
           ACCEPT X LINE LIN COL COLI
                      ON EXCEPTION ESCA NEXT SENTENCE.
           IF ESCA = 27 GO SALIR.
           IF ESCA = 56 IF LI > 0 GO MIRAR.
    (esta linea es para que solo se pueda introducir un espacio).
           IF X = " " IF LI > 0 PERFORM AHORA GO DOS ELSE GO UNO.
           ADD 1 TO LI MOVE X TO ELE (LI).
      DOS.
    (aqui comprobamos que no se nos salga de los limites la linea).
           ADD 1 TO COLI IF COLI > 55 MOVE 2 TO COLI ADD 1 TO LIN.
           IF LIN > 14 GO SALIR.
           GO UNO.

           AHORA.
          (en este párrafo mostramos la palabra introducida y el numero de letras que contiene. Ademas controlamos en que parte de la pantalla nos van apareciendo.
               DISPLAY PALABRA LINE LINEA COL COLUM1 LOW.
               DISPLAY LI LINE LINEA COL COLUM2.
               ADD 1 TO TOTAL MOVE TOTAL TO LTOTAL.
               DISPLAY LTOTAL LINE 16 COL 6 LOW.
               IF TOTAL = 36 GO SALIR.
               INITIALIZE PALABRA MOVE 0 TO LI ADD 1 TO LINEA.
               IF LINEA = 25 IF COLUM1 = 3 MOVE 18 TO LINEA
                  MOVE 30 TO COLUM1 MOVE 50 TO COLUM2 ELSE
                  MOVE 3 TO LINEA MOVE 59 TO COLUM1 MOVE 78 TO COLUM2.

           SALIR.
    (este parrafo finaliza el programa).
               DISPLAY "COMPLETADO EL EDITOR" LINE 13 COL 20.
               ACCEPT X LINE 13 COL 18 LOW.
               STOP RUN.

           MIRAR.
         ( este parrafo lo utilizamos cuando borramos un caracter dentro de una palabra).
               SUBTRACT 1 FROM COLI.
               IF COLI = 1 MOVE 55 TO COLI SUBTRACT 1 FROM LIN.
               MOVE " " TO ELE (LI).
               DISPLAY " " LINE LIN COL COLI.
               SUBTRACT 1 FROM LI.
               GO UNO.

    Fijaros en que la idea de un editor parte del caracter y no de palabras, así es mas fácil controlar lo que vamos introduciendo. Por supuesto se puede ir ampliando hasta donde se quiera, se pueden controlar comas, puntos. Se puede justificar, todo es cuestión de pensar un poco mas, pero eso os lo dejo a vosotros, para que experimentéis.

    Es evidente que nadie va a utilizar un editor realizado en cobol, porque el mercado está saturado de ese tipo de programas que encima hacen maravillas. Pero todas estas cosas nos sirven para coger mas confianza con el lenguaje y utilizar la lógica que nos puede ayudar en otras circunstancias.



Este artículo proviene de Cobol en español
http://www.escobol.com

La dirección de esta noticia es:
http://www.escobol.com/modules.php?name=Sections&op=viewarticle&artid=88