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.
SUBSTV(upper_limit, source_string, start, sub_limit, output)
donde:
Número entero
Es el límite de longitud de la cadena de origen.
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).
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.
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.
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.
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 |