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.
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.
Tens um arquivo com mais dados e um exemplo do que deveria resultar?
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.
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)
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 "=".
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"
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.
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.
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=”.
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”
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 {“
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