BASE DE DADOS DE CONHECIMENTO

Extração de subcadeias de caracteres delimitadas por caracteres de cadeias de caracteres


Publicado: 13 Dec 2013
Data da última modificação: 11 Mar 2024

Pergunta

Como extrair uma sequência de caracteres, delimitada por caracteres específicos de início e fim, de uma sequência maior de caracteres.

Ambiente

  • Tableau Desktop

Resposta

As instruções a seguir descrevem como extrair uma subcadeia de uma longa sequência de caracteres e podem ser revisadas na pasta de trabalho em anexo.
  1. Selecione Análise > Criar campo calculado.
  2. Na caixa de diálogo Campo Calculado que é aberta:
    • Nomeie o campo calculado. Na pasta de trabalho de exemplo, o campo calculado chama-se Subcadeia de caracteres.
    • No campo de fórmula, crie um campo calculado similar ao seguinte:
      IF CONTAINS([<Dimension>], '<Identifying Character 1>') THEN
      MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character 1>') + 1,
          FIND([<Dimension>],'<Identifying Character 2>') - (FIND([<Dimension>],'<Identifying Character 1>') +1)
      )
      END
      
  3. Clique em OK.
  4. Arraste a subcadeia de caracteres até a divisória Linhas.

Informações adicionais

  • Este cálculo não inclui os caracteres de identificação na subcadeia de caracteres final.Para incluir os caracteres de identificação, remova "+1" em ambos os locais que aparece no cálculo acima.
  • A instrução IF usando a condição CONTAINS ([<Dimension>], '<Identifying Character 1>') filtra quaisquer cadeias de caracteres que não contenham o primeiro caractere de identificação.Isso é necessário porque FIND() retornará 0 se o caractere não for encontrado, que ainda é uma posição inicial válida para MID().
  • "Identifying Character 1" estaria no começo da subcadeia de caracteres desejada.
  • "Identifying Character 2" estaria no final da subcadeia de caracteres desejada.
  • Ao tentar encontrar a subcadeia de caracteres entre 2 instâncias do mesmo caractere (por exemplo "cachorro" na string "o *cachorro* é marrom"), use FINDNTH() em vez de FIND() para a segunda instância.Isso pode ser similar a:
    • MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character>') + 1,
          FINDNTH([<Dimension>],'<Identifying Character>', 2) - (FIND([<Dimension>],'<Identifying Character>') +1)
      )
      
Este artigo resolveu o problema?