Caríssimos, boa tarde. Preciso importar um grande volume de dados de um arquivo texto imenso e possuo um arquivo texto cujo conteúdo quase segue um padrão. O "quase" é que me mata.
Pensem em um arquivo com várias fichas, cada uma com vários campos, e todas as fichas separadas por um delimitador. Algo do tipo: <exemplo> Ficha: 01 Nome: Fulano Resumo: blabla Telefone: 44 xxxx-9460 E-mail: [EMAIL PROTECTED] ----- Ficha:02 Nome: Beltrano Resumo: blabla Telefone: 44 xxxx-2534 E-mail: [EMAIL PROTECTED] ----- Ficha: 03 Nome: Cicrano Resumo: blabla Telefone: 44 xxxx-2300 E-mail: [EMAIL PROTECTED] </exemplo> -- detalhe: a quantidade de espaços é literal e proposital Preciso ler o arquivo e criar uma tabela com os campos FICHA, NOME, RESUMO, TELEFONE, EMAIL e o conteúdo de cada ficha nas linhas. Um dos problemas é que o campo "resumo: blabla" pode ter qualquer conteúdo e ir de 0 (não existir) a infinitas linhas. Outro, é que os campos não são tabulados nem alinhados. Mais um: nem todo campo está sozinho em uma linha. Como no caso da ficha 2, email e telefone estão na mesma linha ou, no caso da ficha 3, "ficha" e "nome" estão na mesma linha. Por fim, os espaços entre Portanto, tudo o que eu tenho de padrão é 1. O ":" separa o rótulo do campo do conteúdo do campo 2. O "-----" separa uma ficha da outra 3. Em toda a ficha o primeiro campo é "ficha" Estou tentando desenvolver um algorítimo em shell, usando grep, sed, awk ou o que mais for possível que me permita varrer o arquivo e fazer a importação. Identificar os campos e relacionar cada campo ao seu conteúdo é relativamente fácil. A dificuldade está em dizer que o conteúdo "[EMAIL PROTECTED]" que achei e relacionei com o campo "EMAIL" pertence à ficha 02. Pensei em usar os delimitadores "-----" como marcadores de ficha, onde eu localizaria todas linhas com o padrão "ficha : conteúdo" colocando o resultado desta pesquisa em um laço onde eu novamente varreria o arquivo pegando o conteúdo dele esta ocorrência até o próximo delimitador "-----" e, dentro de outro laço, pesquisaria os demais campos, já sabendo que eles se referem à ficha tal. O meu problema está em como fazer para pegar o conteúdo do padrão localizado "ficha : conteúdo" até o próximo delimitador "-----" o grep me permite retornar uma quantidade X de linhas antes e/ou depois, mas esta quantidade varia de acordo com o conteúdo do campo "resumo" que pode ocupar várias linhas. Então eu preciso arrumar um jeito de contar quantas linhas existem entre a ocorrência do padrão "ficha | conteúdo" e a próxima ocorrrência do padrão "-----". Isso implica em varrer o arquivo muitas vezes. Alguém poderia me dar uma idéia de um jeito melhor?
