Como: |
Linguagens Disponíveis: Reporting
A função SUBSTV extrai uma substring de uma string e é similar ao SUBSTR. No entanto, a posição final para a string é calculada a partir da posição inicial e do comprimento da substring. Portanto, possui menos parâmetros que SUBSTR. Além disso, o comprimento real do campo de saída, se for um campo AnV, é determinado com base no comprimento da substring.
SUBSTV(upper_limit, source_string, start, sub_limit, output)
onde:
Inteiro
É o limite do comprimento da string fonte.
Alfanumérico do tipo An ou AnV
É a string de caracteres que contém a substring que você deseja extrair. Esta pode ser a string entre aspas simples (') ou o campo que contém a string. Se for um campo, pode possuir o formato An ou AnV. Se for um campo do tipo AnV, seu comprimento é tirado do comprimento em bytes armazenado no campo. Se o upper_limit for menor do que o comprimento, a source_string será truncada conforme este limite máximo. O valor do comprimento final determinado por esta comparação é referido como p_length (consulte a descrição do parâmetro output para obter informações relacionadas).
Inteiro
É a posição inicial da substring na string fonte. A posição inicial pode exceder o comprimento da string fonte, que resulta na exibição de espaços.
Inteiro
É o comprimento em caracteres, da substring. Observe que a posição final pode exceder o comprimento da string de entrada dependendo dos valores fornecidos para start e sub_limit.
Alfanumérico do tipo An ou AnV
É o campo que contém o resultado ou o formato do valor de saída posto entre aspas simples('). Este campo pode estar no formato An ou AnV.
Se o formato de output for AnV, e supondo que end é a posição final da substring, o comprimento real, outlen, é computado como a seguir a partir dos valores para end, start e p_length (consulte o parâmetro source_string para obter informações):
Se end > p_length ou end < start, então outlen = 0. Caso contrário, outlen = end - start + 1.
A solicitação a seguir extrai um artigo definido ou indefinido à direita de umtítulo de filme (como ", THE" em "SMURFS, THE"). Primeiro, ele corta os espaços em branco à direita para que o artigo entre no padrão à direita. Em seguida, ele encontra a posição inicial e o comprimento do padrão. Em seguida, SUBSTV extrai o padrão e TRIMV corta o padrão do 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
A saída é:
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
Information Builders |