SUBSTV: Como Extrair uma Substring de Comprimento Variável

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.


Topo da página

x
Sintaxe: Como Extrair uma substring de comprimento variável
SUBSTV(upper_limit, source_string, start, sub_limit, output)

onde:

upper_limit

Inteiro

É o limite do comprimento da string fonte.

source_string

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).

iniciar

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.

sub_limit

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.

saída

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.



Exemplo: Como Extrair uma Substring de Comprimento Variável

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