A ideia desta dica surgiu a partir de uma pergunta feita no repositório do
SciDAVis no GitHub [
1].
English version is after the links.
A questão foi a seguinte: é possível utilizar o SciDAVis para carregar dados dinamicamente em uma tabela, em determinados intervalos de tempo, e atualizá-los em um gráfico?
E a resposta é simples: sim, através de scripts em python no SciDAVis. Porém, infelizmente, só é possível utilizar scripts em python no SciDAVis nas versões disponíveis para Linux (ao menos na maioria das distribuições) e Mac, ou em versões antigas para Windows (≤ 1.D5), conforme já foi noticiado neste blog [
2].
Então, para os felizes usuários de Linux e Mac que tem o suporte a scripts em python habilitado, segue um script com um exemplo de como carregar dados de forma dinâmica no SciDAVis, de modo que eles sejam importados para uma tabela e atualizados em um gráfico:
import time
import os
t=newTable("DynamicTable") #Tabela onde os dados serão importados
file="/home/fellype/file.dat" #Caminho para o arquivo com os dados
modTime0=os.path.getmtime(file) # *Obs1
mod="True"
n=1 # *Obs2
while (mod == "True"):
t.importASCII(file," ",0,False,False,True,False) # *Obs3
if (n == 1):
g=plot(t,"2",0) # Plotando os dados da coluna 2 da tabela t
time.sleep(20) # *Obs4
modTime=os.path.getmtime(file)
if (modTime == modTime0):
mod="False"
else:
modTime0=os.path.getmtime(file)
n=2
Com o script acima, se o arquivo "/home/fellype/file.dat" for modificado dentro de um intervalo de 20 segundos, os dados na tabela "DynamicTable" serão atualizados, assim como o gráfico "g".
*Obs1: Obtém dados de quando o arquivo foi modificado pela última vez.
*Obs2: Usado para impedir que um novo gráfico seja criado a cada vez que o arquivo de dados for modificado.*Obs3: A sintaxe da função importASCII é: importASCII(file,"separador de colunas", ignore=0, renameCols=False, stripSpaces=False, simplifySpace=True, newTable=False). Consulte o manual [3] para mais informações sobre o uso de python no SciDAVis.*Obs4: A unidade de tempo na função time.sleep() é em segundos. Faça as contas para converter em minutos, horas, etc..., conforme a sua necessidade.
Uma desvantagem de utilizar a função time.sleep() é que o seu projeto no SciDAVis ficará paralisado durante o intervalo de tempo que for determinado na função. Logo, se você quiser fazer outras coisas no SciDAVis enquanto o script é executado, terá que abrir outra janela e criar outro projeto.
Como não sou um expert no uso de python, acredito que este script possa ser melhorado. Logo, se vocês tiverem sugestões, fiquem à vontade para incrementá-lo e compartilhar com outros usuários.
Até mais.
Links:
[1] https://github.com/highperformancecoder/scidavis/issues/46
[2] http://scidavisbr.blogspot.com.br/2015/12/atualizacao-disponivel-scidavis-1d9.html
[3] https://highperformancecoder.github.io/scidavis-handbook/
________________________________________________________________________