Captura de relatório - De: TXT Para: CSVO queTransforma um relatório de texto em CSV.
Por queEm geral, relatórios são projetados somente para saída impressa, ou seja, incluem itens que facilitam
... [More]
a leitura das pessoas: cabeçalho, número de página, totais etc.
Pra quePara tabular os dados de um relatório, ele deve estar num formato que o gerenciador de planilha/banco de dados consiga interpretar, o formato mais simples para isto chama-se CSV (Comma-Separed Values).
O que precisaPara orientar o programa, é preciso marcar que partes do relatório correspondem às colunas da tabela e qual(is) condição(ões) que valida(m) estas partes. Este roteiro vamos chamar de modelo, e, a maneira de indicar estas marcas, chamamos linguagem de marcação e que vamos apelidar de PTML (de Plain Text Markup Language, obviamente uma referencia à conhecida HTML).
Recapitulando: É preciso criar um arquivo PTML para realizar a captura de um relatório. A existência deste programa esta apoiada na premissa de que criar um arquivo PTML é mais rápido e fácil que adaptar/criar uma macro/script de leitura linha-a-linha.
Definições da PTMLToda marca fica delimitada entre colchetes []
Tipo de marcas possíveis
Campo
[um_nome_qualquer_de_campo]Condição
[eh_numero]
[eh_data]
[este_texto]Próxima Linha
[+]Toda linha que contiver uma ou mais marcas de Campo ou uma marca de Próxima Linha, deve conter uma ou mais marcas de Condição ou a linha anterior deve ter uma marca de Próxima Linha.
Criando o modelo de capturaPreparando o modelo
A partir do relatório original, copiar do primeiro caractere até o final do primeiro registro, de forma que não apareçam campos repetidos, e colar num novo arquivo de texto. Neste arquivo serão adicionados as marcas (conforme orientações abaixo) e então estará criado o modelo PTML.
Definindo campos
Para marcar os campos, inserir no texto do modelo, imediatamente antes do campo, uma marca no formato [nome_do_campo] e logo após o último caractere [/nome_do_campo]. Atenção para não inserir nenhum caractere a mais no texto, exceto as próprias marcas.
Definindo condições
Para cada linha no modelo que contenha campos, deve haver pelo menos uma forma de identificar aquela linha como única. Essa identificação pode ser uma expressão de texto que sempre aparece em determinado lugar e apenas naquele tipo de linha, neste caso, usa-se a marca [este_texto] antes do primeiro caractere e [/este_texto] ao final. Outra forma é, no caso da linha em questão ter um conjunto de caracteres numéricos em determinada posição e essa característica só se manifestar neste tipo de linha, usa-se a marca [eh_numero] e [/eh_numero], o mesmo ocorre com a marca [eh_data] e [/eh_data].
Para casos mais complicados, pode-se combinar mais de uma marca na mesma linha, e, ainda, utilizar o recurso de negação, por exemplo: se os caracteres demarcados não são numéricos, fechar a marca [eh_numero] com [\eh_numero], ou seja, usando a barra invertida. O mesmo vale para as outras marcas.
Para o caso de linha que não tenha nenhuma característica que a defina como única, porém a linha que a antecede tem, usa-se a marca [+] ao final da linha anterior, que significa: "se as marcas da linha atual forem válidas, capturar também os campos da linha abaixo desta". É possível usar [+] em linhas consecutivas desde que não haja marcas de condição entre a primeira e a última [+]. [Less]