[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [shell-script] Filtro para TXT - Campos com Comprimento Fixo
From: |
Gabriel Federizzi |
Subject: |
RE: [shell-script] Filtro para TXT - Campos com Comprimento Fixo |
Date: |
Tue, 9 Sep 2003 20:06:35 -0300 |
E se vc usar: tr -s " " "|"
para substituir cada conjunto de espaços por um | ou autra coisa do genero.
Assim você tem um separador.
cat arq.txt|tr s |
Campo|Posicao|Inicial|Posicao|Final
Nome|1|35
Ender|36|70
Bairro|71|90
Cidade|91|120
CEP|121|128
UF|129|130
_____
From: César A. K. Grossmann [mailto:address@hidden]
Sent: segunda-feira, 8 de setembro de 2003 11:18
To: address@hidden
Grande ALL!
Tenho um pequeno desafio de programação, e trata-se de outro filtro.
Suponha que você tenha um sistema que importe dados no formato TXT, um
registro por linha, campos com largura fixa, com um certo leiaute,
algo tipo:
Campo Posicao Inicial Posicao Final
Nome 1 35
Ender 36 70
Bairro 71 90
Cidade 91 120
CEP 121 128
UF 129 130
Suponha que você receba este arquivo de várias pessoas diferentes, só
que cada uma faz uma exportação do sistema deles, seguindo um leiaute
próprio, como, por exemplo:
Campo Posicao Inicial Posicao Final
Codigo 1 10
Nome 11 50
Ender 51 70
Bairro 71 90
Cidade 91 110
CEP 111 118
UF 119 120
Tem um campo a mais, e os outros campos tem alinhamento e largura
diferentes.
Não fica difícil, com a descrição acima, escrever um filtro para esta
importação, mas para fazer a importação de outros arquivos, com
diferentes formatos, seria necessário escrever novos filtros.
O ideal, a meu ver, seria se houvesse um filtro mais genérico, que
recebesse o leiaute da entrada e o leiaute de saída, e fizesse a
conversão.
Alguém sabe de alguma coisa no gênero? Pensei no AWK ou no SED, mas os
dois tem uma desvantagem: para trabalhar com registros em uma linha,
com comprimento fixo, não é exatamente direto... O AWK pede um
separador de campos (existe uma extensão no GNU AWK que possibilitaria
isto, mas a página do manual não é muito animadora sobre isto:
HYPERLINK
"http://www.gnu.org/manual/gawk-3.1.1/html_node/Constant-Size.html#Constant%
="http://www.gnu.org/manual/gawk-3.1.1/html_node/Constant-Size.html#Constant
%=
20Size
"Note: This program uses a number of awk features that haven't been
introduced yet").
No manual do SED eu não vi nada que possa me servir...
O Perl talvez seja de ajuda, mas eu teria que aprender aquela pérola...
Alguém tem alguma sugestão?
[]s
--
César A. K. Grossmann
HYPERLINK
"http://www.LinuxByGrossmann.cjb.net/"http://www.LinuxByGrossmann.cjb.net/
Yahoo! Groups Sponsor
HYPERLINK
"http://br.rd.yahoo.com/M=218762.2810952.4917482.1588051/D=brclubs/S=2137111
254:HM/A=1331060/R=1/SIG=10vqa2grn/*http:/br.diversao.yahoo.com/"
HYPERLINK
"http://br.rd.yahoo.com/M=218762.2810952.4917482.1588051/D=brclubs/S=2137111
254:HM/A=1331060/R=2/SIG=10vqa2grn/*http:/br.diversao.yahoo.com/"
O que você vai fazer hoje?
seções Academias Bares Cafés Boate Cinema Exposições Festas
Motéis Parques Pousadas Restaurantes Shows Teatro Vídeos
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em HYPERLINK
"http://www.listasdiscussao.cjb.net"http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
Seu uso do Yahoo! Grupos é sujeito aos HYPERLINK
"http://br.yahoo.com/info/utos.html"Termos do Serviço Yahoo!.
---
Incoming mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.515 / Virus Database: 313 - Release Date: 1/9/2003
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.515 / Virus Database: 313 - Release Date: 1/9/2003
[As partes desta mensagem que não continham texto foram removidas]