01 de junho de 2017
Para este tutorial vamos criar um programa simples que converte dias em minutos, assim você poderá gerenciar melhor seus minutos diários ;)
Vamos começar criando o programa com um valor fixo e exibindo o resultado na tela, depois vamos incrementando as funcionalidades de leitura e escrita.
Crie um arquivo chamado days2minutes.rb e insira o código abaixo:
days = 1 minutes = days * 24 * 60 puts "#{days} day(s) contain(s) #{minutes} minute(s)."
Para rodar o programa execute:
ruby days2minutes.rb
A saída será "1 day(s) contain(s) 1440 minute(s).".
Agora ao invés de deixar o parâmetro days de forma hardcoded, vamos obter seu valor de outro arquivo.
Crie um novo arquivo input.txt e insira uma única linha com algum valor numérico qualquer, vamos escolher 10 apenas para mudarmos um pouco do teste anterior.
Agora edite o arquivo days2minutes.rb e na primeira linha, onde atribuímos o valor da variável days, troque pela seguinte linha:
days = File.read('input.txt').to_i
Aqui utilizamos o método read da classe File passando um parâmetro do tipo string com o nome do arquivo a ser lido.
Note também que convertemos o valor lido para um inteiro com o método to_i, pois a leitura retorna por padrão uma string, e como vamos realizar um cálculo matemático com ela precisamos de um número.
Rode novamente o programa e veja o resultado, a saída deve ser "10 day(s) contain(s) 14400 minute(s).", caso você tenha usado o valor proposto de dias.
Legal, já conseguimos ler um arquivo e utilizar o valor lido dentro do programa, agora vamos criar e escrever em um arquivo.
Depois da última linha que exibe o valor na tela, acrecente:
out = File.new("output.txt", "w") out.puts "#{days} day(s) contain(s) #{minutes} minute(s)." out.close
Na primeira linha utilizamos o método new da classe File para criarmos um novo arquivo passando dois parâmetros, o primeiro é o nome do arquivo e o segundo é o file mode, usamos "w" para escrita (write em inglês) já que queremos escrever no arquivo.
A segunda linha chama o método puts no objeto out que está mapeando nosso arquivo e insere o conteúdo no mesmo.
A terceira linha fecha o arquivo.
Rode novamente o programa e veja que além de exibir o resultado na tela, um novo arquivo output.txt foi criado contendo a nossa saída.
O programa completo ficou assim:
days = File.read('input.txt').to_i minutes = days * 24 * 60 puts "#{days} day(s) contain(s) #{minutes} minute(s)." out = File.new("output.txt", "w") out.puts "#{days} day(s) contain(s) #{minutes} minute(s)." out.close
Você pode melhorar um pouco o programa removendo a duplicação do trecho "#{days} day(s) contain(s) #{minutes} minute(s).", colocando esta string em uma variável e passando a mesma para as partes que a utilizam.
O programa foi simples (e sem muita utilizade prática), mas a intenção foi passar os conceitos de leitura e escrita de arquivos do Ruby.
Em Ruby normalmente existe mais de uma foma de se fazer as coisas e isso é válido para a manipulação de arquivos.
Uma outra maneira de se escrever o código das últimas três linhas é através de um bloco:
File.open("output.txt", "w") do |out| out.puts "#{days} day(s) contain(s) #{minutes} minute(s)." end
Algumas das vantagens do bloco é que o fechamento do arquivo é feito de forma automática (sem a necessidade do out.close) e o fato de agrupar a manipulação do arquivo dentro do mesmo bloco, tornando o código mais conciso e legível.
Espero que o tutorial seja útil.
Um abraço e até o próximo tutorial.
Visualizações: 7.585
25 de junho de 2017
08 de novembro de 2016