shell-script-pt
[Top][All Lists]
Advanced

[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?





reply via email to

[Prev in Thread] Current Thread [Next in Thread]