Pessoal
O telegrama que recebo vindo da comunicação serial que tenho é :
-1885.2 mV
-1885.6 mV
-1885.4 mV
-1885.7 mV
Usei o seguinte regex:
[0-9]{4}.[0-9]
sem sucesso na leitura.
O erro é Value String not found.
O modo de parada coloquei como 10 caracteres no data source.
Qual o regex correto disso?
Ontem a noite dei mais uma estudada sobre Regex.
Encontrei ferramentas linux que permitem testar a expressão regular.
Uma delas foi a Visual REGEXP, do L.Riester, testei em meu ubuntu 11.04
$ sudo apt-get install visual-regexp
Apesar de ser uma ferramenta visual, o Visual Regexp não instalou-se no menu ubuntu. Rode-o no console:
$ visual-regexp
Se não quiser instalar, existe versão online de outro autor, gskinner, com GUI semelhante:
http://www.gskinner.com/RegExr/
Essa é interessante, online também, mais intuitiva:
http://txt2re.com/
Ainda não consegui testar, porque estraguei minha instalação rxtx, quando instalei o eclipse, e rodando um programinha java para testar/verificar minha usb/serial.
Encontrei um artigo do Aurélio Marinho Vargas, que agilizou minha evolução em expressões regulares:
http://aurelio.net/regex/guia/
Verifiquei que o formato do trem de caracteres do equipamento muda, conforme o valor:
1995.5 mV
- 1995.5 mV
- 1995.5 mV
1995.5 mV
1995.5 mV
895.6 mV
- 895.6 mV
95.6 mV
- 95.6 mV
5.6 mV
- 5.6 mV
0.0 mV
Usando as ferramentas citadas, principalmente essa do gskinner http://www.gskinner.com/RegExr/ e cheguei na seguinte REGEX para capturar as leituras acima:
((.)+\d{4}.\d{1} (mV))|((.)+\d{3}.\d{1} (mV))|((.)+\d{2}.\d{1} (mV))|((.)+\d{1}.\d{1} (mV))
Penso que não é uma solução muito técnica montar 4 expressões do tipo OU “|” para capturar largura de dígitos antes do ponto decimal. Deve ter algo melhor para fazer isso.
Galera, essa sintaxe usada no SCADABR é do java ?