[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Delimitadores de trecho de texto
From: |
Cristiano Ferrari |
Subject: |
Delimitadores de trecho de texto |
Date: |
Wed, 29 Oct 2008 19:23:31 -0000 |
User-agent: |
eGroups-EW/0.82 |
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: address@hidden
-----
Ficha:02
Nome: Beltrano
Resumo: blabla
Telefone: 44 xxxx-2534 E-mail: address@hidden
-----
Ficha: 03 Nome: Cicrano
Resumo: blabla
Telefone: 44 xxxx-2300
E-mail: address@hidden
</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 "address@hidden" 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?
- Delimitadores de trecho de texto,
Cristiano Ferrari <=