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

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



reply via email to

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