Created
August 3, 2013 02:39
-
-
Save evaldosantos/6144895 to your computer and use it in GitHub Desktop.
Validação de cálculo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Entrada | |
def initialize(linha) | |
linha = linha.split(',') | |
@numero = linha[0] | |
@operacao=linha[1] | |
@classificacao=linha[2] | |
@valor=linha[3].to_f | |
@valor_imposto=linha[4].to_f | |
end | |
def numero | |
@numero | |
end | |
def operacao | |
@operacao | |
end | |
def classificacao | |
@classificacao | |
end | |
def valor | |
@valor | |
end | |
def valor_imposto | |
@valor_imposto | |
end | |
end | |
class Regra | |
def initialize(linha) | |
linha = linha.split(',') | |
@regra = linha[0] | |
@operacao = linha[1] | |
@classificacao = linha[2] | |
@aliquota = linha[3].to_f | |
end | |
def regra | |
@regra | |
end | |
def operacao | |
@operacao | |
end | |
def classificacao | |
@classificacao | |
end | |
def aliquota | |
@aliquota | |
end | |
end | |
class Saida | |
def initialize(arquivo_entrada, arquivo_regra, arquivo_saida) | |
@arquivo_entrada = arquivo_entrada | |
@arquivo_regra = arquivo_regra | |
@arquivo_saida = arquivo_saida | |
end | |
def encontra_regra(entrada) | |
text=File.open(@arquivo_regra).read | |
count=0 | |
text.each_line do |line| | |
if count>0 # linha[0] e o cabecalho | |
regra = Regra.new(line) | |
if (entrada.operacao==regra.operacao && entrada.classificacao==regra.classificacao) || | |
(regra.operacao=="*" && entrada.classificacao==regra.classificacao) || | |
(entrada.operacao==regra.operacao && regra.classificacao=="*") | |
return regra | |
end | |
end | |
count+=1 | |
end | |
end | |
def saida | |
text=File.open(@arquivo_entrada).read | |
begin | |
file = File.open(@arquivo_saida, "w") | |
count=0 | |
text.each_line do |line| | |
if count>0 # linha[0] e o cabecalho | |
entrada = Entrada.new(line) | |
regra = encontra_regra(entrada) | |
file.write("#{entrada.numero}, #{regra.regra}, #{valida(entrada, regra)}\n") | |
end | |
count+=1 | |
end | |
rescue IOError => e | |
puts "Erro" | |
ensure | |
file.close unless file == nil | |
end | |
end | |
def calculo_imposto(entrada, regra) | |
entrada.valor*regra.aliquota/100.0.to_i | |
end | |
def valida(entrada, regra) | |
return entrada.valor_imposto==calculo_imposto(entrada, regra) ? 'S' : 'N' | |
end | |
end | |
# para rodar este script faz-se necessário os arquivos entrada.txt e regras.txt | |
# o arquivo saida será criado na execução do script | |
Saida.new('entrada.txt', 'regras.txt', 'saida.txt').saida |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment