01 de junho de 2017

Lendo e escrevendo arquivos em Ruby

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 escrita de arquivos do Ruby.

Outras formas

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: 360



Ruby

25 de junho de 2017

Strings com Ruby

Neste tutorial vamos aprender diversas maneiras de manipulação de Strings em Ruby.

08 de novembro de 2016

Ruby curto-circuito

Muitas vezes queremos atribuir um valor a uma variável com base no valor de outra. Podemos obter isso usando uma cláusula IF, um condicional ternário ou o curto-circuito.

Sérgio Toledo | Full-Stack Web Developer | LinkedIn | GitHub | YouTube

Todos os direitos reservados ©