jueves, 17 de enero de 2013

Libro recomendado del mes

     El libro que os voy a recomendar en esta ocasión es Programación con Visual Basic .NET de Fernando Charte (editorial Anaya).

     La pega que puede tener este libro es que está indicado para gente con un nivel medio o avanzado en Visual Basic. Lo utilicé cuando aprendí a programar en Visual Basic .NET pero para aprender ciertas cosas, lo más básico del Visual Basic .NET lo aprendí gracias a unos apuntes que me dieron mientras estudiaba y a la página web de EL Guille (dicha página la encontrarás en la sección Páginas de Interés de este mismo blog).

     Por lo tanto, este libro os lo recomendaría siempre que tengas ciertas nociones de Visual Basic .NET, dichas nociones las puedes adquirir a través de los diversas páginas existentes (como la mencionada anteriormente) o a través de los apuntes que hay colgados en internet.

     Cabe destacar que este libro incluye un CD-ROM con los ejemplos indicados en el libro.

miércoles, 2 de enero de 2013

Cobol: conversiones entre tipos de datos (1)

En una entrada anterior, cuyo título era Cobol: redefines (pinchar aquí para ver dicha entrada),  vimos cómo utilizar la cláusula redefines. En uno de los ejemplos indicados se utilizaba esta cláusula para convertir un alfanumérico en un numérico. Ésto es muy útil cuando tenemos datos alfanuméricos del tipo '00005', '00045', '00345' y '02345' porque al redefinirlos en un dato numérico del tipo PIC 9(05) tenemos que obtendríamos los siguientes datos numéricos: 00005 (o lo que es lo mismo 5), '00045' (o lo que es lo mismo 45), '00345' (o lo que es lo mismo 345) y '02345' (o lo que es lo mismo 2345).

Pero, ¿qué sucede si nos llega un alfanumérico como '1     '? Como se puede observar en ese alfanumérico, lo que nos estaría llegando es un 1 y cuatro espacios en blanco detrás de ese 1. Si redefinimos dicho alfanumérico en un numérico como el indicado anteriormente, PIC 9(05), tendríamos el valor 1 con valores inadecuados en las cuatro posiciones siguientes y esto podría resultar indeseable al realizar un tratamiento de dicho dato numérico. Pues bien, en esta entrada vamos a ver cómo solventar este caso.

Veamos el siguiente ejemplo: queremos transformar la cadena '10        ' en una variable numérica 00010 (o 10) de tipo PIC S9(5). Para ello haremos el tratamiento que se explica a continuación.

Tenemos las siguientes variables:

  W100-NUM-DIAS -> PIC X(10)
  variable alfanumérica que podrá venir informado como '10        ' o '360       '

  W100-NUM-DIAS-N -> PIC S9(5)
  variable numérica en la que guardaremos el valor anterior transformado

  W400-INDICE   -> PIC 9(02)
  W400-CONT-NUM -> PIC 9(01)
  W400-IND-NUM  -> PIC 9(01)
  W400-IND-MAX  -> PIC 9(01)

Y la siguiente constante:

  W300-M-1 PIC S9(1) VALUE -1.

El código a ejecutar para realizar dicha transformación sería el siguiente:

     MOVE 1                         TO W400-CONT-NUM

     PERFORM UNTIL W100-NUM-DIAS(W400-CONT-NUM:1) IS NOT NUMERIC
                          OR W400-CONT-NUM > 5
           ADD 1                       TO W400-CONT-NUM
     END-PERFORM

     MOVE W400-CONT-NUM             TO W400-IND-NUM
     ADD W300-M-1                         TO W400-IND-NUM
     MOVE 5                                   TO W400-IND-MAX
     MOVE ZEROES                          TO W100-NUM-DIAS-N

     PERFORM UNTIL W400-IND-NUM = ZEROES OR W400-IND-MAX = ZEROES
          MOVE W100-NUM-DIAS(W400-IND-NUM:1) TO
                   W100-NUM-DIAS-N(W400-IND-MAX:1)  
          ADD W300-M-1                TO W400-IND-NUM
          ADD W300-M-1                TO W400-IND-MAX
     END-PERFORM.

Este fragmento podría incluirse en un párrafo cuyo nombre podría ser, por ejemplo, TRANSFORMAR-ALFANUM-NUM.