Eu preciso puxar um número específico da última linha de um arquivo de log do MSI Afterburner em regex

1

Não sei nada sobre o regex, mas preciso selecionar valores da última linha de um log que imprime assim:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,405.000 

Eu preciso de um regex que agarre o local onde o 354.000 (número entre 100 e 9999) está neste exemplo, assim:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,**354**.000             ,405.000 

Assim como um regex que irá capturar o local onde o 405 está nesta instância, assim:

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,**405**.000 

Estou usando um programa chamado CrystalControl2 para exibir informações do meu computador em uma tela LCD externa. A ferramenta embutida no programa para capturar informações de arquivos de texto ou páginas em HTML requer um regex para extrair resultados das informações de origem não filtradas.

Para ser mais específico, o arquivo de log adiciona uma linha ao arquivo de texto com o clock do núcleo da GPU e o clock da memória nos locais que destaquei uma vez por segundo. Eu quero puxar esses valores atualizados e exibi-los em campos na tela LCD via CrystalControl2. Eu estou tentando obter esses valores sem instalar outro software que é mais facilmente acessível de CrystalControl2 para evitar conflitos de software, bem como executar um punhado de programas diferentes para fazer referência a todas as informações que eu quero exibir no meu LCD

Como eu disse, esses números podem ser de 3 ou 4 dígitos ... isso é possível?

    
por Jason Updegraff 22.06.2017 / 05:49

2 respostas

0

Então, evidentemente, há uma séria falta de documentação para o formato de regex do CrystalControl2. Mas pelo que eu recolhi ao olhar para os poucos exemplos que consegui encontrar, eles usam o agrupamento para extrair o texto necessário. Alguns têm mais grupos do que outros e não ficou claro para mim porquê. Mas aqui está uma rachadura em um regex para combinar os números no log do MSI Afterburner.

\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$

Como?

Então vamos separar isso. Vamos trabalhar para trás desde o final, pois temos uma âncora de fim de linha ( $ )

  1. $ - âncora até o final da linha.

    Apesar dos exemplos, pareceu-me que esta âncora até o final do arquivo.

  2. [^,]* - corresponde a zero ou mais de qualquer coisa mas vírgulas

  3. \. - corresponde a um ponto (ponto decimal).

    O \ é necessário porque . é especial em regex e significa que corresponde a qualquer coisa. O \ faz dele apenas um ponto.

  4. (\d+) - corresponde a um ou mais dígitos e agrupa-os com () .

    O grupo permite que o resultado da partida seja extraído.

  5. ,[^0-9,]* - corresponde a uma vírgula seguida de zero ou mais não dígitos ou vírgulas

  6. \.[^,]* - encontre um ponto seguido por zero ou mais não-vírgulas

  7. \D+(\d+) - encontre um ou mais não dígitos seguidos de um ou mais dígitos e agrupe os dígitos

Teste:

Como não tenho acesso ao LCD ou ao seu SW, usei o perl para testar isso:

cat file1 | perl -lpe 's/\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$/::::  xxx /'

Resultados do teste:

80, 21-06-2017 20:42:27, 16.000:::: 1392 xxx 4714
80, 21-06-2017 20:42:28, 6.000:::: 860 xxx 810
80, 21-06-2017 20:42:29, 7.000:::: 860 xxx 810
80, 21-06-2017 20:42:30, 7.000:::: 354 xxx 405

Assim, o regex encontrou os dois últimos números na linha, como pode ser visto entre ::: e xxx

Atualização de resultados dos comentários

    
por 22.06.2017 / 17:55
-1

Bem, o que você tentou,

Eu sugiro dar uma olhada no NimbleText , bastante fácil de usar

Não entendi completamente seu problema, mas criei um trecho aqui para ajudar ainda mais.

link

<% ($3 > 100 && $3 < 9999) ? $3 : '' %> | <% ($4 > 100 && $4 < 9999) ? $4 : '' %>

Espero que ajude

    
por 22.06.2017 / 10:29

Tags