class Counter attr_reader :characters def initialize() @characters = Hash.new(0) # Crea l'hash dei caratteri end def read() @text = IO.read("testo.txt").downcase # Legge da file i caratteri e li converte in minuscolo end def count_chars @text.each_byte do |ch| #Assegna i caratteri come header dell'hash e conta quante volte compaiono @characters[ch] +=1 end end end prova = Counter.new() prova.read prova.count_chars m = prova.characters sum = m[138] + m[130] + m[141] + m[133] + m[149] +m[151] # Bisogna tener conto anche dei caratteri accentati (è, ì, ecc.) 97.upto(122) do |k| # Conta i caratteri totali sum += m[k] end File.open("Frequenze.txt" , "w") do |out| # Scrive su file una colonna di lettere con le relative frequenze in percentuale del totale 97.upto(122) do |i| if i == 101 sume = m[i]+m[138]+m[130] out.puts "#{i.chr}, #{sume.to_f/sum}" elsif i == 105 sumi = m[i]+m[141] out.puts "#{i.chr}, #{sumi.to_f/sum}" elsif i == 97 suma = m[i]+m[133] out.puts "#{i.chr}, #{suma.to_f/sum}" elsif i == 111 sumo = m[i]+m[149] out.puts "#{i.chr}, #{sumo.to_f/sum}" elsif i == 117 sumu = m[i]+m[151] out.puts "#{i.chr}, #{sumu.to_f/sum}" else out.puts "#{i.chr}, #{m[i].to_f/sum}" end end end