[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Formatação de arquivo orientado a colunas (cut)
From: |
Salvador S. Scardua |
Subject: |
Formatação de arquivo orientado a colunas (cut) |
Date: |
Wed, 10 May 2006 18:42:01 -0300 |
Estava aguardando ansioso por uma oportunidade de aprender ShellScript, Então
que,
quando eu menos esperava, meu patrão me deu uma tarefa que achei interessante
tentar
utilizar ShellScript, dediquei algum tempo de estudo mas cheguei a um impasse,
não
consigo formatar o arquivo (leia-se novato), o arquivo entrada é este, direto
do Mainframe (SCO 5);
-------------------------------------------------------------------------------
3.2.3.05.01.004 DEPRECIACOES 31/12/2005 0197 0,00 3.007,08
TRANSF. SALDO ENC. EXERCICIO
DEPRECIACOES 31/12/2005 0231 0,00 3.007,08
TRANSF. SALDO ENC. EXERCICIO
DEPRECIACOES 31/12/2005 0278 77,64 0,00
VR DEPREC.CFE RELAT. 12/2005
3.2.3.05.01.005 MULTAS FISCAIS 22/12/2005 0119 95,44 0,00
PG MULTA POR RETIF. DIA/DS
SEFAZ
MULTAS FISCAIS 22/12/2005 0121 0,00 756,00
AV DE CREDITO REEMB.MULTA REV
ICMS OUTROS LC 22 DO BR LTDA
MULTAS FISCAIS 22/12/2005 0121 0,00 10.800,00
AV DE CREDITO REEMB.MULTA
ISOLADA ICMS LC 22 VALTRA DO BR
3.2.3.05.01.006 OUTRAS DESPESAS NAO 02/12/2005 0009 40,00 0,00
PG MICHELLE REF FAXINA ESCRIT.
CFE RECIBO
OUTRAS DESPESAS NAO 02/12/2005 0009 40,00 0,00
PG SIDNEI DE J. SILVA REF
CAFE P/ LOJA CFE RECIBO
OUTRAS DESPESAS NAO 02/12/2005 0009 32,00 0,00
PG OSVALDO REF FRETE CFE
RECIBO
-------------------------------------------------------------------------------
E deve ficar assim (saída);
---------------------------------------------------------------------------------------------------------------------------------------
3.2.3.05.01.004;DEPRECIACOES 31/12/2005 0197 + TRANSF. SALDO ENC.
EXERCICIO;0,00;3.007,08
3.2.3.05.01.004;DEPRECIACOES 31/12/2005 0231 + TRANSF. SALDO ENC.
EXERCICIO;0,00;3.007,08
3.2.3.05.01.004;DEPRECIACOES 31/12/2005 0278 + VR DEPREC.CFE RELAT.
12/2005;77,64;0,00
3.2.3.05.01.005;MULTAS FISCAIS 22/12/2005 0119 + PG MULTA POR RETIF.
DIA/DS + SEFAZ;95,44;0,00
3.2.3.05.01.005;MULTAS FISCAIS 22/12/2005 0121 + AV DE CREDITO
REEMB.MULTA REV + ICMS OUTROS LC 22 DO BR LTDA;0,00;756,00
3.2.3.05.01.005;MULTAS FISCAIS 22/12/2005 0121 + AV DE CREDITO
REEMB.MULTA + ISOLADA ICMS LC 22 VALTRA DO BR;0,00;10.800,00
3.2.3.05.01.006;OUTRAS DESPESAS NAO 02/12/2005 0009 + PG MICHELLE REF
FAXINA ESCRIT. + CFE RECIBO;40,00;0,00
3.2.3.05.01.006;OUTRAS DESPESAS NAO 02/12/2005 0009 + PG SIDNEI DE J. SILVA
REF + CAFE P/ LOJA CFE RECIBO;40,00;0,00
3.2.3.05.01.006;OUTRAS DESPESAS NAO 02/12/2005 0009 + PG OSVALDO REF FRETE
CFE + RECIBO;32,00;0,00
---------------------------------------------------------------------------------------------------------------------------------------
Eu ia escrever em outra linguagem a solução, inclusive já havia até escrito o
algoritmo (reescrevi em uma espécie de
algol+shell), dêem uma olhada;
####################################################################
######## LOOP PARA PERCORRER TODO ARQUIVO, LINHA A LINHA ########
####################################################################
if [[ `cut -c15` = [:digit:] ]] # Conteúdo da coluna 15 é um dígito?
then
$conta=`cut -c-15` # SIM, variável conta recebe Conteúdo
do primeiro campo
####################################################################
######## LOOP PARA CAPTURAR TODO CONTEÚDO DA COLUNA DETALHES #######
######## Opções de Critério: CHECAR COLUNA ADIÇÔES OU EXCLUS.#######
####################################################################
if [[ `cut -c64` = [:digit:] ]] # Conteúdo da coluna 64 é um dígitio?
then
$detalhes=`cut -c17-51` # SIM, colhe o conteúdo das colunas
onde estão os valores
$adicao=`cut -c53-65`
$exclusao=`cut -c66-79`
else
$detalhes=$detalhes" + "`cut -c17-51` # NÃO, concatena o conteúdo de
detalhes
fi
echo $conta\;$detalhes\;$adicao\;$exclusao >> arqformatado.csv #
Descarrega o conteúdo das variáveis no arquivo
fi
Sei que da forma que está não é possível o funcionamento, mas gostaria de
dicas de por exemplo, se este é o correto caminho
com o cut -c, já que o arquivo.dat é feito em colunas (coisa do COBOL), pois
estou pensando em fazer esta tarefa em outra linguagem
mas antes gostaria de conversar sobre esse problema com os gurus, pois acabei
me envevenando em alguns sites de scripts que essa
tarefa não seria interessante em shellscript, realmente não consegui
compreender como ler um arquivo linha a linha em shellscript e usar
as variáveis da forma que escrevi no algoritmo (mas tenho a noção que meu
conhecimento é pequeno ainda sobre shellscript)
Obrigado pela atenção de todos.
--------------------------------------------
Salvador S. Scardua
Departamento de TI
Programador Junior
Pianna Com. Imp. Export. Ltda
27-3373 - 7527
address@hidden
address@hidden
---------------------------------------
[As partes desta mensagem que não continham texto foram removidas]
- Formatação de arquivo orientado a colunas (cut),
Salvador S. Scardua <=