Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
joaopassos97
Contributor II
Contributor II

Extrair parâmetros de um .txt longo utilizando Qlik Sense

Boa tarde, amigos da comunidade, como vocês estão?

Eu tenho um desafio nas mãos e gostaria de uma ajuda de vocês.
Eu trabalho no setor industrial, mais precisamente em controle de processo.
Com o objetivo de ter um banco de dados atualizado com as informações de etiquetagem de equipamentos e malhas de controle(Tags), extraímos as configurações utilizando o recurso disponibilizado para nós pela empresa que nos vendeu o software de controle.
O tipo de arquivo gerado é de texto e sua organização é vertical e os parâmetros de configuração são separados em grupos e subgrupos delimitados por chaves{}

Foi-me dada a missão de tratar e organizar esses dados em uma tabela e, digamos, dar nome aos bois.

Quando eu importo o arquivo, ele cria apenas uma coluna (@1).

Eu pesquisei no help sobre funções de string e encontrei uma gama de coisas.

Como eu nunca tive contato com o Qlik Sense, até duas semanas atrás e estou tentando me acostumar com o ambiente e meu tempo está curto porque estão me cobrando por causa da importância desse projeto.

O arquivo está estruturado da seguinte maneira:

MODULE TAG="LIC-206A_1" PLANT_AREA="AREA_A/CALDEIRAS" CATEGORY=""

user="ADMINISTRATOR" time=1164283218/* "23-Nov-2006 09:00:18" */

{

  DESCRIPTION="Master PID control loop"

  PERIOD=5

  CONTROLLER=""

  PRIMARY_CONTROL_DISPLAY=""

  INSTRUMENT_AREA_DISPLAY="LOOP_FP"

  DETAIL_DISPLAY="LOOP_DT"

  TYPE="Analog Control"

  SUB_TYPE="CASCADE_MASTER"

  ASSIGN_BLOCKS_TO_H1_CARD=F

  FUNCTION_BLOCK NAME="AI1" DEFINITION="FFAI"

  {

  DESCRIPTION="Analog Input"

  ID=100376530

  RECTANGLE= { X=40 Y=180 H=56 W=140 }

}
}

Destaquei os parâmetros que precisamos tratar, sendo em vermelho o titulo ( comum para todos) e, em verde, a sua correspondência.

Aqui está um exemplo do que eu estou buscando

É como se cada coluna fosse uma dimensão relativa a cada parâmetro e isso, ao meu ver, deixaria a visualização e edição dos dados mais simplificada.

O titulo pode mudar, não é regra. Eu só quero poder pegar esses dados e colocá-los lá.

É possível, utilizando o Qlik sense(ou outra ferramenta),  criar um script que possa fazer a varredura e coletar esses dados desse arquivo?

Obrigado e até mais.

Labels (1)
12 Replies
fmbrancher
Creator
Creator

João e se tu tentar exportar para o excel? Ele separa certinho por colunas???

Ai tu poderia salvar esse .xls e depois imprtar para o QLIK com as colunas separadas.

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Tens um arquivo com mais dados e um exemplo do que deveria resultar?

furtado@farolbi.com.br
joaopassos97
Contributor II
Contributor II
Author

Oi, a unica forma de extração é esse arquivo .txt e ele nao fica separado por colunas por estar arrumado verticalmente. eu ja tentei de tudo. Fora que o arquivo estoura a quantidade de linhas do Excel.

joaopassos97
Contributor II
Contributor II
Author

Sim, tenho. O arquivo é um Txt de aproximadamente 4 milhões de linhas contendo todas as configurações.. Posso anexar algo para que você possa dar uma olhada.
Amostra.txt - Google Drive

A tabela que eu quero é semelhante à imagem da questão(Que eu fiz no Access)

joaopassos97
Contributor II
Contributor II
Author

O que eu quero, basicamente é: identificar uma palavra fixa e imprimir a variável até à segunda aspas duplas, que representa o final.
OU identificar a palavra fixa e imprimir a próxima palavra a partir do "=".

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

João,

se fizer o que esta dizendo, como fica esta pequena parte do texto abaixo?

Tem varias repeticoes para NAME, visto que é o nome de algum objeto e entao dentro das chaves {} seriam como se fossem os campos da chave anterior.

Neste caso, quais seriam os campos a ler?  Todos? Porque ai teria que relacionar com o campo "superior" para ter a hierarquia.....

  ATTRIBUTE NAME="FQI-207-2" TYPE=FLOAT

  {

    CONNECTION=OUTPUT

    RECTANGLE= { X=580 Y=300 H=20 W=70 }

    CATEGORY { CATEGORY=COMMON }

  }

  ATTRIBUTE NAME="HORA" TYPE=EXTERNAL_REFERENCE

  {

    CONNECTION=INPUT

    RECTANGLE= { X=30 Y=450 H=20 W=70 }

    CATEGORY { CATEGORY=COMMON }

  }

  FBD_ALGORITHM

  {

    GRAPHICS ALGORITHM=FBD

    {

      BOX_GRAPHIC

      {

        NAME="{156E6672-1DB2-443A-8752-79B4F22BB737}"

        RECTANGLE= { X=10 Y=220 H=370 W=690 }

        LINE_STYLE=SOLID

        LINE_WIDTH=1

        LINE_COLOR= { RED=0 GREEN=0 BLUE=0 }

        FGD_COLOR= { RED=255 GREEN=255 BLUE=255 }

        BGD_COLOR= { RED=0 GREEN=0 BLUE=0 }

        FILL_PATTERN=""

      }

      TEXT_GRAPHIC

      {

        NAME="{7C48F19C-56DB-4BD4-BFA2-924BA02B9738}"

        ORIGIN= { X=23 Y=274 }

        END= { X=248 Y=316 }

        TEXT="TOTALIZADOR COM RESET AS 22:00:

FQI-207-1 = TOTALIZADOR DO DIA ATUAL

FQI-207-2 = TOTALIZADOR DO DIA ANTERIOR"

furtado@farolbi.com.br
joaopassos97
Contributor II
Contributor II
Author

Alessandro,


Nesse caso não temos campos para ler, ou seja, esses seriam desconsiderados. Teríamos que procurar por uma string como "ATTRIBUTE_INSTANCE NAME" e exibir o que está entre aspas.

joaopassos97
Contributor II
Contributor II
Author

O campo "superior" seria o "module tag", pois tudo o que vem abaixo disso (até o outro module tag) são parâmetros de configuração dele.

joaopassos97
Contributor II
Contributor II
Author

Bom dia, fiz um pequeno resumo da disposição das informações dos dados no arquivo:

Os dados que pretendemos extrair seguem a seguinte lógica que se repete por todo o arquivo:

1 – Eles estão sempre associados a um TAG que não se repete.

2 – O valor da TAG esta sempre precedido do parâmetro “MODULE TAG=”.

  1. 2.1  – Exemplo, MODULE TAG="LIC-206A_1", valor = LIC-206A_1.

3 – O conteúdo das informações que pretendemos extrair estão entre os parâmetros “MODULE TAG=”. Ou seja, tudo abaixo do module TAg pertence a ele até encontrar outro module tag
3.1-  Module Tag: "xxxx"
          xxxx
               xxxxx
                    xxxxx
        Module Tag="YYYY"


4 – Os valores dos parâmetros que pretendemos extrair segue a seguinte lógica  ATTRIBUTE_INSTANCE NAME=”Instancia do parâmetro desejado

  1. 4.1 – Exemplo, ATTRIBUTE_INSTANCE NAME="LO_ALM", sendo  LO_ALM = Instancia do parâmetro desejado.

5 – O parâmetro e o valor que desejamos extrair estão abaixo de “ATTRIBUTE_INSTANCE NAME="HI_HI_ALM", LO_ALM = Instancia do parâmetro desejado” e de “ VALUE  {“

            

  1. 5.1 – Exemplo de parâmetro e o valor a ser extraído, PRIORITY_NAME="CRITICAL",  SUPPTIMEOUT=1438560,    ENAB=F.

MODULE TAG="LIC-206A_1" PLANT_AREA="AREA_A/CALDEIRAS" CATEGORY=""

user="ADMINISTRATOR" time=1164283218/* "23-Nov-2006 09:00:18" */

{

  DESCRIPTION="Master PID control loop"

  PERIOD=5

  CONTROLLER=""

  PRIMARY_CONTROL_DISPLAY=""

  INSTRUMENT_AREA_DISPLAY="LOOP_FP"

  DETAIL_DISPLAY="LOOP_DT"

  TYPE="Analog Control"

  SUB_TYPE="CASCADE_MASTER"

  ASSIGN_BLOCKS_TO_H1_CARD=F

  FUNCTION_BLOCK NAME="AI1" DEFINITION="FFAI"

  {

    DESCRIPTION="Analog Input"

    ID=100376530

    RECTANGLE= { X=40 Y=180 H=56 W=140 }

  }

  ATTRIBUTE_INSTANCE NAME="HI_HI_ALM"

  {

    VALUE

    {

      PRIORITY_NAME="CRITICAL"

      ENAB=F

      INV=F

     ATYP="High High Alarm"

      MONATTR=""

      ALMATTR="PID1/HI_HI_ACT"

      LIMATTR="PID1/HI_HI_LIM"

      PARAM1="PID1/PV"

      PARAM2="PID1/HI_HI_LIM"

      SUPPTIMEOUT=1438560

      MASK=65535

      ISDEFAULTMASK=T

      ALARM_FUNCTIONAL_CLASSIFICATION=0

      ALARM_DESCRIPTION=""

    }

    VALUE_CHANGED=T

    HAS_DEFAULT_VALUE=F

  }

Espero que isso ajude