POSITV: Cómo hallar el principio de una subcadena de longitud variable

Cómo:

Lenguajes disponibles: informes

La función POSITV halla la posición inicial de una subcadena dentro de una cadena más larga. Por ejemplo, la posición inicial de la subcadena DUCT dentro de la cadena PRODUCTION, es 4. Si la subcadena no está dentro de la cadena principal, la función devuelve un valor de 0. Esta función es similar a POSIT; sin embargo, las longitudes de sus parámetros AnV están basadas en las longitudes reales de aquellos parámetros comparados con otros dos parámetros que especifican su tamaño.


Principio de página

x
Sintaxis: Cómo Hallar el principio de una subcadena de longitud variable
POSITV(source_string, upper_limit, substring, sub_limit, output)

donde:

source_string

Alfanumérico de tipo An o AnV

Es la cadena de origen que contiene la subcadena cuya posición desea hallar. Puede tratarse de la cadena entre comillas simples, o de un campo o variable que la contenga. Si es un campo en formato AnV, se toma la longitud en bytes almacenada en el campo. Si upper_limit es inferior a la longitud real, la cadena de origen queda truncada por este límite superior.

upper_limit

Número entero

Es un límite de longitud para la cadena de origen.

substring

Alfanumérico de tipo AnV o An

Es la subcadena de la que se desea hallar la longitud. Puede tratarse de la subcadena entre comillas simples ('), o del campo que contiene la cadena. Si es un campo, puede estar en formato An o AnV. Si es un campo de tipo AnV, se toma la longitud en bytes almacenada en el campo. Si sub_limit es inferior a la longitud real, la cadena de origen queda truncada en este límite.

sub_limit

Número entero

El límite de longitud de la subcadena.

output

Número entero

Es el nombre del campo que contiene el resultado, o el formato del valor de salida puesto entre comillas solas (').



Ejemplo: Cómo hallar la posición inicial de patrón de longitud variable

POSITV determina la posición inicial de un artículo final, definido o indefinido, en el título de una película (como ", THE" en SMURFS, THE). Primero, TRIMV elimina los espacios en blanco finales del título para que el artículo se convierta en el patrón final:

DEFINE FILE MOVIES
  TITLEV/A39V = TRIMV('T',TITLE, 39,' ', 1, TITLEV);
  PSTART/I4 = POSITV(TITLEV,LENV(TITLEV,'I4'), ',', 1,'I4');
  PLEN/I4 = IF PSTART NE 0 THEN LENV(TITLEV,'I4') - PSTART +1
                    ELSE 0;
END
TABLE FILE MOVIES
  PRINT TITLE
   PSTART AS 'Pattern,Start' IN 25
   PLEN AS 'Pattern,Length'
BY CATEGORY  NOPRINT
WHERE PLEN NE 0
END

La salida es:

                         Pattern  Pattern
 TITLE                     Start   Length 
 -----                   -------  -------
 SMURFS, THE                   7        5
 SHAGGY DOG, THE              11        5
 MALTESE FALCON, THE          15        5
 PHILADELPHIA STORY, THE      19        5
 TIN DRUM, THE                 9        5
 FAMILY, THE                   7        5
 CHORUS LINE, A               12        3
 MORNING AFTER, THE           14        5
 BIRDS, THE                    6        5
 BOY AND HIS DOG, A           16        3

WebFOCUS