lunes, 2 de diciembre de 2013

Contar posiciones desde el final: FUNCTION REVERSE

Hoy traemos un mini artículo sobre una opción de la sentencia INSPECT.

Lo más habitual es usar el INSPECT para reemplazar caracteres, o para contar posiciones de izquierda a derecha (ejemplo replacing, ejemplo tallying).
Puede darse el caso de que necesitemos conocer la posición donde está el último carácter informado de un campo. El problema se que no siempre tendremos un delimitador que nos lo indique para poder hacer un INSPECT TALLYING del modo tradicional.

En este caso entra en juego el INSPECT FUNCTION REVERSE. Como siempre, lo vemos mejor con un ejemplo.

Imaginad que tenemos una variable de longitud 80 que contiene un texto de longitud variable:

 01 WS-DATOS PIC X(80) VALUE 'X XX XXXXXX X X XXXXXXXXXXXX XXXX'
-               ' XX X XXXXX XXXXXXXXX                         '.

Necesitamos conocer cuanto mide la información que contiene, es decir, sin los espacios en blanco del final.

Para ello podemos usar la siguiente sentencia:

INSPECT FUNCTION REVERSE (WS-DATOS) TALLYING WS-LONG FOR LEADING SPACES

Donde WS-LONG es un campo con PIC S9(4) COMP que guardará la longitud de los espacios en blanco encontrados desde el final de la variable WS-DATOS hasta el primer carácter distinto de espacios.

Si restamos ese valor de la longitud total, tendremos la longitud de la información. En el ejemplo 54.



1 comentario:

Unknown dijo...

Muy bueno, gracias por el aporte!!