O processo:
Gerar um arquivo texto formatado para carga em banco de dados utilizando o SQLLoader do SGBD Oracle. Cada linha desse arquivo deve conter: nome do arquivo, “0”, crc do arquivo, sequência do arquivo e o valor de uma linha de outro arquivo enviado por outro software, ou seja, para cada linha do arquivo enviado deve-se gerar uma nova linha com o formato descrito.
Script gerado:
for arquivo in $DIR_PROC/PCA*.REM ; do
crc=`cksum $arquivo | cut -c1-10`
nomearq=`echo $arquivo | cut -d\/ -f6`
seqarq=`echo $arquivo | cut -d"_" -f2`
for linha in `cat $arquivo`; do
echo $nomearq ",0,"$crc","$seqarq","$linha >> $DIR_PROC/arqPrepCartao.txt
done
`cp -f $arquivo $DIR_PROC/lidos_txt/$dia`
done
O problema:
O comando “echo”, utilizado para a criação da linha do novo arquivo, tem como padrão “quebrar” a linha sempre que encontra um espaço em branco na string utilizada. Como o arquivo original é formatado e, obviamente, tem vários espaços inseridos para colocar os valores na coluna esperada, o arquivo destino “arqPrepCartao.txt” fica totalmente desconfigurado. Com isso, a carga no banco de dados tem resultado completamente comprometido.
A solução:
A mais simples que encontrei foi gerar a linha substituindo-se o caractere espaço pelo caractere “#” no comando “cat” da linha do laço – “for” – e retornar com o espaço no lugar de “#” na linha do comando “echo”. Dessa forma o código do script fica assim:
for arquivo in $DIR_PROC/PCA*.REM ; do
crc=`cksum $arquivo | cut -c1-10`
nomearq=`echo $arquivo | cut -d\/ -f6`
seqarq=`echo $arquivo | cut -d"_" -f2`
for linha in `cat $arquivo | tr ' ' '#'`; do
echo $nomearq ",0,"$crc","$seqarq","$linha | tr '#' ' '>> $DIR_PROC/arqPrepCartao.txt
done
`cp -f $arquivo $DIR_PROC/lidos_txt/$dia`
done
Enquanto não encontrava a solução postei esse problema em uma thread com o título “Line break problem” no fórum do Ubuntu. Uma das soluções propostas criava a nova linha sem quebras, porém, não mantinha o formato original.
A solução foi compartilhada com a comunidade no fórum.
Nenhum comentário:
Postar um comentário