Converter em Literal
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 29/11/2011)
[ Hits: 4.828 ]
Converte números em sua forma literal (ingles e portugues). ex:
./literal -p 10
dez
./literal -e 10
ten
Foi feito para atender uma necessidade de um colega do vol, mas como foi meio corrido ele está um pouco maior do que deveria ... mas funciona. Converte arquivos também.
#!/bin/bash
# literal.sh
# --------------------------------------
# Script Viva o Linux
# --------------------------------------
#       
func_unidade_x ()
{
case $dig in 
"0" )
saida=""
;;
"1" )
saida="one"
;;
"2" )
saida="two"
;;
"3" )
saida="three"
;;
"4" )
saida="four"
;;
"5" )
saida="five"
;;
"6" )
saida="six"
;;
"7" )
saida="seven"
;;
"8" )
saida="eight"
;;
"9" )
saida="nine"
;;
esac
}
func_dez_x ()
{
dig_ax5=`expr $num + 2`
num_1="`echo $numero  |  cut -c $dig_ax5`"
case $dig in 
"0" )
saida=""
;;
"1" )
func_dez1_x
;;
"2" )
saida="twenty"
func_dez2_x
;;
"3" )
saida="thirty"
func_dez2_x
;;
"4" )
saida="fourty"
func_dez2_x
;;
"5" )
saida="fifty"
func_dez2_x
;;
"6" )
saida="sixty"
func_dez2_x
;;
"7" )
saida="seventy"
func_dez2_x
;;
"8" )
saida="eighty"
func_dez2_x
;;
"9" )
saida="ninety"
func_dez2_x
;;
esac
}
func_dez1_x ()
{
case "$num_1" in
"0" )
saida="ten"
;;
"1" )
saida="eleven"
;;
"2" )
saida="twelve"
;;
"3" )
saida="thirteen"
;;
"4" )
saida="fourteen"
;;
"5" )
saida="fifteen"
;;
"6" )
saida="sixteen"
;;
"7" )
saida="seventeen"
;;
"8" )
saida="eighteen"
;;
"9" )
saida="nineteen"
;;
esac
avanca
}
func_dez2_x ()
{
if [ "$num_1" = "0" ]; then
avanca
else
saida="$saida -"
fi
}
func_cem_x ()
{
dig_ax2=`expr $num + 2`
dig_ax3=`expr $num + 3`
num_1="`echo $numero  | cut -c $dig_ax2-$dig_ax3`"
case $dig in 
"0" )
saida=""
;;
* )
func_unidade_x
saida="$saida hundred"
;;
esac
if [ "$num_1" = "00" ]; then
avanca
avanca
else
saida="$saida"
fi
}
avanca ()
{
num=`expr $num + 1`
cont=`expr $cont - 1`
}
resolve_numero_x ()
{
case $cont in
"0" )
;;
"1" )
func_unidade_x
;;
"2" )
func_dez_x
;;
"3" )
if [ "$numero" -eq "1000" ]; then
texto="$texto thousand"
elif [ "$numero" -gt "1000" ]; then
texto="$texto thousands"
fi
func_cem_x
saida="$saida"
;;
"4" )
func_unidade_x
;;
"5" )
func_dez_x
;;
"6" )
func_cem_x
if [ "$numero" -eq "1000000" ]; then
texto="$texto million"
elif [ "$numero" -gt "1000000" ]; then
texto="$texto millions"
fi
;;
"7" )
func_unidade_x
;;
"8" )
func_dez_x
;;
"9" )
func_cem_x
;;
* )
clear 
echo "ERROR: Number $numero exceded script max number (999.999.999)!"
;;
esac
}
principal_x ()
{
cont_x=`echo $numero | wc -c`
cont=`expr $cont_x - 1`
until  [ "$cont" -le 0 ]
do
dig_ax1=`expr $num + 1`
dig="`echo $numero  |  cut -c $dig_ax1`"
resolve_numero_x
avanca
if [ "$texto" = "" ]; then
texto="$saida"
else 
texto="$texto $saida"
fi
done
}
#-------------------------fim-----
func_unidade ()
{
case $dig in 
"0" )
saida=""
if [ "$numero" -eq 0 ]; then
saida="zero"
fi 
;;
"1" )
saida="um"
;;
"2" )
saida="dois"
;;
"3" )
saida="tres"
;;
"4" )
saida="quatro"
;;
"5" )
saida="cinco"
;;
"6" )
saida="seis"
;;
"7" )
saida="sete"
;;
"8" )
saida="oito"
;;
"9" )
saida="nove"
;;
esac
}
func_dez ()
{
dig_ax2=`expr $num + 2` 
num_1="`echo $numero  |  cut -c $dig_ax2`"
case $dig in 
"0" )
saida=""
;;
"1" )
func_dez1
;;
"2" )
saida="vinte"
func_dez2
;;
"3" )
saida="trinta"
func_dez2
;;
"4" )
saida="quarenta"
func_dez2
;;
"5" )
saida="cinquenta"
func_dez2
;;
"6" )
saida="sessenta"
func_dez2
;;
"7" )
saida="setenta"
func_dez2
;;
"8" )
saida="oitenta"
func_dez2
;;
"9" )
saida="noventa"
func_dez2
;;
esac
}
func_dez1 ()
{
case "$num_1" in
"0" )
saida="dez"
;;
"1" )
saida="onze"
;;
"2" )
saida="doze"
;;
"3" )
saida="treze"
;;
"4" )
saida="quatorze"
;;
"5" )
saida="quinze"
;;
"6" )
saida="dezesseis"
;;
"7" )
saida="dezessete"
;;
"8" )
saida="dezoito"
;;
"9" )
saida="dezenove"
;;
esac
avanca
}
func_dez2 ()
{
if [ "$num_1" = "0" ]; then
avanca
else
saida="$saida e"
fi
}
func_cem ()
{
dig_ax6=`expr $num + 1`
dig_ax3=`expr $num + 2`
dig_ax4=`expr $num + 3`
num_1="`echo $numero  | cut -c $dig_ax3-$dig_ax4`"
num_1x="`echo $numero  | cut -c $dig_ax6-$dig_ax4`"
cont1_x=`echo $numero | wc -c`
cont1=`expr $cont1_x - 1`
case $dig in 
"0" )
saida=""
;;
"1" )
if [ "$num_1" = "00" ]; then
saida="cem"
else
saida="cento"
fi
;;
"2" )
saida="duzentos"
;;
"3" )
saida="trezentos"
;;
"4" )
saida="quatrocentos"
;;
"5" )
saida="quinhentos"
;;
"6" )
saida="seiscentos"
;;
"7" )
saida="setecentos"
;;
"8" )
saida="oitocentos"
;;
"9" )
saida="novecentos"
;;
esac
if [ "$num_1" = "00" ]; then
avanca
avanca
else
saida="$saida e"
fi
}
avanca ()
{
num=`expr $num + 1`
cont=`expr $cont - 1`
}
resolve_numero ()
{
case $cont in
"0" )
;;
"1" )
func_unidade
;;
"2" )
func_dez
;;
"3" )
func_cem
if [ "$num_1x" -gt "1" -a "$cont1" -gt "3" ]; then
saida="e $saida"
fi
;;
"4" )
func_unidade
if [ "$cont" = "4" -a "$dig" -gt 0 ]; then
saida="$saida mil"
fi
;;
"5" )
func_dez
if [ "$num_1" = "0" -a "$dig" -gt "0" ]; then
saida="$saida mil"
elif [ "$dig" = "1" ]; then
saida="$saida mil"
fi
;;
"6" )
func_cem
if [ "$num_1" = "00" -a "$dig" -gt "0" ]; then
saida="$saida mil"
fi
if [ "$num_1x" -gt "1" -a "$cont1" -gt "6" ]; then
saida="e $saida"
fi
;;
"7" )
func_unidade
if [ "$cont" = "7" -a "$dig" = 1 -a "$ml" != 1 ]; then
saida="$saida milhco"
else 
saida="$saida milhoes"
fi
;;
"8" )
func_dez
if [ "$num_1" = "0" ]; then
saida="$saida milhoes"
elif [ "$dig" = "1" ]; then
saida="$saida milhoes"
fi
if [ "$dig" -gt "0" ]; then
ml=1
fi
;;
"9" )
func_cem
if [ "$num_1" = "00" ]; then
saida="$saida milhoes"
fi
if [ "$dig" -gt "0" ]; then
ml=1
fi
;;
* )
clear 
echo "ERROR: Numero $numero excedeu o valor maximo do script (999.999.999)!"
exit 0
;;
esac
}
principal ()
{
cont_ax=`echo $numero | wc -c`
#echo "DEBUG: cont_ax"
#echo "DEBUG: $cont_ax"
cont=`expr $cont_ax - 1`
#echo "DEBUG: cont"
#echo "DEBUG: $cont"
until  [ "$cont" -le 0 ]
do
#echo "DEBUG: num"
#echo "DEBUG: $num"
dig_ax=`expr $num + 1` 
#echo "DEBUG: dig_ax"
#echo "DEBUG: $dig_ax"
dig="`echo $numero  |  cut -c $dig_ax`"
resolve_numero
avanca
if [ "$texto" = "" ]; then
texto="$saida"
else 
texto="$texto $saida"
fi
done
}
#-------------------------fim-----
help ()
{
clear
echo "
User Commands                                           literal(1)
`tput bold`NAME`tput sgr0`
     literal - traduz numeros para sua representacao por extenso.
`tput bold`SYNOPSIS`tput sgr0`
     literal  [opcao][numero] [-f] [nome_do_arquivo]
`tput bold`DESCRIPTION`tput sgr0`
     Converte numeros em sua representacao por extenso.
     Valor limitado a 999999999.
`tput bold`OPTIONS`tput sgr0`
     The following options are supported:
     -p    -  numeros em portugues.
     -e    -  numeros em ingles.
     -v    -  imprime o numero entre parenteses apos a sua forma por extenso.
     -f    -  define arquivo de entrada.
     Examples:
       literal -p 1000
       literal -e 200
       literal -pv 100
       literal -p -f arquivo_entrada
       literal -ev -f arquivo_entrada > arquivo_de_saida
`tput bold`ALERT`tput sgr0`
       A conversco podera alterar a formatacao do arquivo.
`tput bold`VERSION`tput sgr0`
       Version is 1.01
`tput bold`BUG REPORT`tput sgr0`
       dmarp@ig.com.br
"
exit 0
}
le_arquivo ()
{
frase=""
cat $arquivo | sed 's/\*/#_asterisco_flag/'g | while read line 
do
num=0
le2 
echo "$frase" | sed 's/#_asterisco_flag/\*/'g
frase=""
done 
}
le2 ()
{
for i in `echo $line | xargs -n 1`; do 
expr $i / 1 2>>/dev/null 1>>/dev/null
if [ $? = 0 ]; then
numero="$i"
le_arquivo_1
# mudei
if [ "$opcao" = '-vp' ]; then
i="$numero ($texto)"
elif [ "$opcao" = '-pv' ]; then
i="$texto ($numero)"
elif [ "$opcao" = '-ve' ]; then
i="$numero ($texto)"
elif [ "$opcao" = '-ev' ]; then
i="$texto ($numero)"
else 
i="$texto"
fi
texto=""
num=0
fi
if [ "$frase" = "" ]; then
frase="$i"
else
frase="$frase $i"
fi;
done
}
le_arquivo_1 ()
{
if [ "$opcao" = '-p' ]; then
principal
elif [ "$opcao" = '-e'  ]; then
principal_x
elif [ "$opcao" = '-pv'  ]; then
principal
elif [ "$opcao" = '-vp' ]; then
principal
elif [ "$opcao" = '-ev' ]; then
principal_x
elif [ "$opcao" = '-ve'  ]; then
principal_x
else
help
exit 0
fi
}
num=0
cont_ax=0
dig_ax=0
dig_ax1=0
dig_ax2=0
dig_ax3=0
dig_ax4=0
dig_ax5=0
opcao=$1
numero="$2"
if [ "$2" = '-f'  ]; then
arquivo="$3"
le_arquivo
elif [ "$1" = '-p' ]; then
principal
echo $texto
elif [ "$1" = '-e'  ]; then
principal_x
echo $texto
elif [ "$1" = '-pv'  ]; then
principal
echo "$texto ($numero)"
elif [ "$1" = '-vp' ]; then
principal
echo "$numero ($texto)"
elif [ "$1" = '-ev' ]; then
principal_x
echo "$texto ($numero)"
elif [ "$1" = '-ve'  ]; then
principal_x
echo "$numero ($texto)"
else
help
exit 0
fi
Regula o horário de uso do computador pelos filhos - Versão 2.0
dcalc: Calculadora Com Conversão de Bases
tirinha-0.5.sh : Baixa as tirinhas da Ilustrada da Folha de São Paulo
Backup dos arquivos e diretórios de um servidor com XMAIL e Iptables para um servidor central de Bac
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









