SUBSTV: Cómo extraer una subcadena de longitud variable

Cómo:

Lenguajes disponibles: informes

La función SUBSTV, similar a SUBSTR, extrae una subcadena a partir de una cadena. Sin embargo, la posición final de la cadena se calcula a partir de la posición inicial y la longitud de la subcadena. Por tanto, tiene menos parámetros que SUBSTR. Además, si se trata de un campo AnV, la longitud real del campo de salida se determina en función de la longitud de la subcadena.


Principio de página

x
Sintaxis: Cómo Extraer una subcadena de longitud variable
SUBSTV(upper_limit, source_string, start, sub_limit, output)

donde:

upper_limit

Número entero

Es el límite de longitud de la cadena de origen.

source_string

Alfanumérico de tipo An o AnV

Es la cadena de caracteres que contiene la subcadena que desea extraer. Puede ser la cadena entre comillas simples o el campo que la contiene. 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 upper_limit es inferior a la longitud real, la cadena de origen queda truncada por el límite superior. El valor de longitud final determinado por esta comparativa se denomina p_length (para más información, consulte la descripción del parámetro de output).

start

Número entero

Es la posición inicial de la subcadena dentro de la cadena de origen. La posición inicial puede sobrepasar la longitud de la cadena de origen, resultando en espacios.

sub_limit

Número entero

Es la longitud de la subcadena, en caracteres. Tenga en cuenta que la posición final puede superar la longitud de la cadena de entrada, dependiendo de los valores proporcionados para start y sub_limit.

output

Alfanumérico de tipo An o AnV

Es el campo al que se devuelve el resultado, o el formato del valor de salida entre comillas simples ('). Este campo puede estar en formato An o AnV.

Si el formato deoutput es AnV, asumiendo que end es la posición final de la subcadena, la longitud real, outlen, se calcula en base a los valores de end, start y p_length (para más información, consulte source_string ):

Si end > p_length o end < start, luego outlen = 0. De lo contrario, outlen = end - start + 1.



Ejemplo: Cómo extraer una subcadena de longitud variable

La siguiente solicitud extrae un artículo final, definido o indefinido, del título de una película (como ", THE" en "SMURFS, THE"). Primero recorta los espacios en blanco finales para que el artículo se convierta en el patrón final. A continuación, halla la posición inicial y la longitud del patrón. Después, SUBSTV extrae el patrón y TRIMV lo recorta del título:

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;
  PATTERN/A20V= SUBSTV(39, TITLEV, PSTART, PLEN, PATTERN);
  NEWTIT/A39V = TRIMV('T',TITLEV,39,PATTERN,LENV(PATTERN,'I4'), NEWTIT);
END
TABLE FILE MOVIES
  PRINT TITLE
   PSTART AS 'Pattern,Start' IN 25
   PLEN AS 'Pattern,Length'
  NEWTIT AS 'Trimmed,Title' IN 55
BY CATEGORY  NOPRINT
WHERE PLEN NE 0
END

La salida es:

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

WebFOCUS