Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: 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