[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Formatar numeros
From: |
Valtoir |
Subject: |
Formatar numeros |
Date: |
Wed, 22 Jun 2005 17:52:17 -0300 |
User-agent: |
Mozilla Thunderbird 1.0.2 (X11/20050317) |
Pessoal, precisava pegar um arquivo texto com registros de tamanho fixo
e extrair alguns dados. De posse do layout, resolvi
fazer uma funcao para formatar uma coluna de valores em reais cujo dados
continham zeros à esquerda, algo como pegar o seguinte:
00000001534
00000025682
00000000150
00004152358
e transformar em:
R$ 15,34
R$ 256,82
R$ 1,50
R$ 41.523,58
Para isso, fiz um script separado, que recebe cada valor e formata.
Também aproveitei e fiz algumas consistências a fim de facilitar o
reaproveitamento do código. Agora é só transformá-lo numa função. Como
gostei do resultado final, resolvi divulgar. Caso alguém queira
otimizá-lo, melhor.
Ah, na linha:
[ ${#PARAM} -gt 3 ] && PARAM=$( echo $PARAM | sed 's/^0*//' )
tentei fazer assim para eliminar os zeros à esquerda, pensando em poupar
um sed
[ ${#PARAM} -gt 3 ] && PARAM=${PARAM##0}
mas não deu certo... sei lá...
Uél, o scrip é esse aí:
--------------------------------------------8<--------------------------------------------------------------
# Jogo o parametro para uma variavel, o que ja elimina espaços em branco
iniciais e finais
PARAM=$1
# Testo se o parametro eh valido (apenas numeros) e saio em caso negativo
[ "$( echo $PARAM | grep -c [^0-9] )" != "0" ] && {
echo "parâmetro inválido"
exit 1
}
# Elimino possiveis zeros a esquerda (fora a dezena de centavos e a
unidade de real)
[ ${#PARAM} -gt 3 ] && PARAM=$( echo $PARAM | sed 's/^0*//' )
# Adiciono zeros a esquerda se o valor for menor que 1
while [ ${#PARAM} -lt 3 ]; do
PARAM="0$PARAM"
done
# Coloco o ponto formatador de milhar
[ ${#PARAM} -gt 5 ] && {
SIZE=$(( ${#PARAM} % 3 + 1 ))
NEW=${PARAM:0:SIZE}
PARAM=${PARAM#$NEW}
NEW=$NEW.
}
while [ ${#PARAM} -gt 5 ]; do
TMP=${PARAM:0:3}
NEW=$NEW$TMP.
PARAM=${PARAM#$TMP}
done
PARAM=$NEW$PARAM
# Formato com simbolo de moeda e virgula decimal
PARAM="R\$ ${PARAM:0:$(( ${#PARAM} - 2 ))},${PARAM:$(( ${#PARAM} - 2 ))}"
echo "<$PARAM>"
--------------------------------------------8<--------------------------------------------------------------
PS: Agora aparece alguém e faz em uma linha, com sed :-)
Valtoir
- Formatar numeros,
Valtoir <=