Independentemente da linguagem de programação ou da ferramenta que você usa, você deve primeiro estabelecer como identificar de maneira confiável as informações que precisa extrair.
Parece-me que a sua data segue "Data da empresa:" no início de uma linha.
O número do terminal segue "nn / nn / nnnn: nn: nn" (data e hora) no início de uma linha.
Você não sabe ao certo qual quantidade ou comissão deseja. Suponho que você deseja os valores que seguem "TOTAL POR COMERCIANTE:"
É bastante fácil obter as informações usando o lote puro.
Para este exemplo, estou assumindo que o texto está em um arquivo chamado test.txt.
O comando FINDSTR pode procurar as 3 linhas que contêm seus dados usando expressões regulares primitivas. A opção /R
trata as pesquisas como expressões regulares. Eu uso uma opção /C:"search string"
separada para especificar cada seqüência de pesquisa que contém espaços. Ao procurar a linha que começa com uma data e hora, optei por simplesmente procurar as barras e dois-pontos com o número adequado de caracteres entre.
O comando FOR / F analisa as três linhas da saída FINDSTR, uma linha por vez. Por padrão, ele trata espaços e tabulações como delimitadores de token. Uma cadeia de espaços consecutivos é tratada como um único delimitador. Portanto, tanto a data quanto o número do terminal são o terceiro token na linha. Seu valor e comissão são o 5º e o 6º tokens na linha.
Por isso, solicito explicitamente os 3º, 5º e 6º tokens de cada linha, especificando %%A
como o primeiro token capturado. Isso significa que o terceiro token estará em %%A
, o quinto em %%B
e o sexto em %%C
.
Limpo explicitamente as variáveis dt
e term
. As linhas sempre aparecem na mesma ordem, então eu simplesmente verifico se dt
está definido. Se não, então deve ser a primeira linha e eu defino o valor da data. Caso contrário, eu verifico se term
está definido. Se não, então deve ser a segunda linha e eu definir o valor do terminal. Caso contrário, deve ser a terceira linha e eu defino os valores de quantidade e comissão.
@echo off
setlocal
set "dt="
set "term="
for /f "tokens=3,5,6" %%A in (
'findstr /rc:"^Business Date:" /c:"^../../.. ..:..:.." /c:"TOTAL PER MERCHANT:" test.txt'
) do (
if not defined dt (
set "dt=%%A"
) else if not defined term (
set "term=%%A"
) else (
set "amt=%%B"
set "comm=%%C"
)
)
echo %dt%;%term%;%amt%;%comm%
Este problema não foi particularmente difícil de resolver usando o lote puro, mas muitas vezes o lote não é adequado para o processamento de texto. Muitas vezes requer muito código arcano e / ou pode ser lento.
Escrevi o JREPL.BAT - um utilitário híbrido JScript / batch que pode executar operações de localização / substituição de expressões regulares sofisticadas de maneira muito eficiente no texto. O JREPL.BAT é um script puro que é executado nativamente em qualquer máquina Windows do XP em diante. A documentação completa está incorporada no utilitário. Pode ser acessado emitindo jrepl /?
. Você pode usar jrepl /?|more
se quiser ver a ajuda uma página por vez.
Supondo que você tenha o JREPL.BAT em algum lugar dentro de seu PATH, o seguinte extrairá as informações:
@echo off
call jrepl "[\s\S]*\nBusiness Date: (.*?) (?:.*\n){5}.*? .*? (.*?) [\s\S]*?TOTAL PER MERCHANT: +.*? +(.*?) +([^ ]*)[\s\S]*" "$1;$2;$3;$4" /m /f test.txt
echo(