Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Separar dados no script

Bom dia

Tenho um campo na base chamado DOCUMENTO, onde nele vem 3 informações:

  1. Número da requisição/nota fiscal
  2. Código do requisitante/fornecedor
  3. Descrição do requisitante/fornecedor

Tais informações são separadas por " - ".

Existe alguma forma de eu separa este campo, no script, em 3 novos campos? Ja tentei utilizar o MID, porém nem sempre os campos tem o mesmo número de casas.

Documento.jpg

Desde já agradeço.

Labels (2)
1 Solution

Accepted Solutions
rphpacheco
Creator III
Creator III

Um exemplo:

Teste:

LOAD

*,

SubField(campo, '-', 1) AS campo1,

SubField(campo, '-', 2) AS campo2,

SubField(campo, '-', 3) AS campo3;

LOAD * Inline [

campo

010101010 - 01 - 45

]
;

View solution in original post

9 Replies
Not applicable
Author

Bom dia Rodrigo,

Utilize o comando Subfield para fazer esta separação.

abs.

Not applicable
Author

Como você obtêm eles ? através de uma carga SQL ?

matzenbacher
Creator II
Creator II

Not applicable
Author

A carga é feita por SQL. Já solicitei a TI da empresa que faça a carga com os campos separados, mas fazem 4 meses e nada ainda.

Not applicable
Author

Dei uma lida no tópico, porem o exemplo dado (pelo q entendi) é em 3 colunas diferentes. Quero separar uma coluna em 3.

Quero que, da primeira casa até o primeiro traço (  -  ) , seja uma coluna, do primeiro traço até o segundo, outra coluna, e após o segundo traço, a terceira coluna.

Desculpe minha ignorância se entendi errado..

matzenbacher
Creator II
Creator II

chegou a notar no primeiro load do exemplo:
(
txt, codepage is 1252, embedded labels, delimiter is ';', msq);

se for um arquivo de texto, carrega ele  utilizando o delimiter com o "-" ao invés do ";"

De fato, no post o subfield esta sendo usado pra outra coisa.

rphpacheco
Creator III
Creator III

Um exemplo:

Teste:

LOAD

*,

SubField(campo, '-', 1) AS campo1,

SubField(campo, '-', 2) AS campo2,

SubField(campo, '-', 3) AS campo3;

LOAD * Inline [

campo

010101010 - 01 - 45

]
;

Not applicable
Author

De uma olhada na função MID

Eu precisei ler dados de um CNAB, segue código de exemplo. O ideal se eles forem te mandar txt,fala para determinar que de posição x - y vai ser tal campo.

mid(s, n1[, n2 ])

Subcaracter do caracter s. O resultado é um caracter iniciado no caractere n1, com o comprimento de n2 caracteres. Se n2 for omitido, a função retornará a parte mais à direita do caracter, a partir do caracter n1. As posições na seqüência são numeradas de 1 em diante.

[DADOS_CNAB_SEGMENTO_J]:

LOAD

mid(@1,1, 3 ) AS [CODIGO DO BANCO],

mid(@1,4, 4 ) AS [CODIGO DO LOTE],

mid(@1,8, 1 ) AS [TIPO DE REGISTRO],

mid(@1,9, 5 ) AS [NUMERO DO REGISTRO],

mid(@1,14,1 ) AS [SEGMENTO],

mid(@1,15,3 ) AS [TIPO DE MOVIMENTO],

mid(@1,18,3 ) AS [BANCO FAVORECIDO],

mid(@1,21,1 ) AS [MOEDA],

mid(@1,22,1 ) AS [DV],

mid(@1,23,4 ) AS [VENCIMENTO],

mid(@1,27,10) AS [VALOR],

mid(@1,37,25) AS [CAMPO LIVRE],

mid(@1,62,30) AS [NOME DO FAVORECIDO],

mid(@1,92,8)  AS [DATA VENCTO],

mid(@1,100,15)AS [VALOR DO TÍTULO],

mid(@1,115,15)AS [DESCONTOS],

mid(@1,130,15)AS [ACRESCIMOS-CODIGO],

mid(@1,145,8) AS [DATA PAGAMENTO],

mid(@1,153,15)AS [VALOR PAGAMENTO],

mid(@1,162,15)AS [ZEROS],

mid(@1,183,20)AS [SEU NÚMERO],

mid(@1,203,13)AS [BRANCOS],

mid(@1,216,15)AS [NOSSO NÚMERO],

mid(@1,231,10)AS [OCORRENCIAS]

Not applicable
Author

Deu certo.. Fiz conforme o exemplo que o Raphael postou, e ficou como queria.

Obrigado amigos pela ajuda.

DOCUMENTO:

LOAD Distinct

  DOCUMENTO,

  SubField(DOCUMENTO, '-', 1) AS NR_REQUISIÇÃO,

  SubField(DOCUMENTO, '-', 2) AS EMITENTE_C,

  SubField(DOCUMENTO, '-', 3) AS EMITENTE_D,

  SubField(DOCUMENTO, '-', 2)&' - '&SubField(DOCUMENTO, '-', 3) AS EMITENTE

FROM

E:\QVD\Fato_Orcamento_Realizado.qvd

(qvd);