[ruby-it] l'include in un array come funziona?
Mauro Sanna
mauro.sanna a comune.cagliari.it
Dom 8 Apr 2007 22:34:26 CEST
Domenico Delle Side wrote:
> Mauro Sanna wrote:
>> non cambia niente, ho provato anche a mettere un valore del tipo
>> if m.include? "prova a xxx.xx.xx" che sono sicuro esserci ma non lo trova.
>> Perche'? Mi sta facendo dannare........
>
> Ho fatto una prova con irb, usando dei valori simili ai tuoi e non
> cambia anche per me, la soluzione che ti ho proposto e solo pił
> veloce/sintatticamente pił corretta, dato che passi comunque una stringa
> ad include?.
Ho risolto con l'aiuto di qualcuno in un newgroup ma a causa della mia
scarsa conoscenza di ruby mi sono limitato ad applicare i suggerimenti
senza capire molto.
Riposto le poche righe di codice:
class MyNewClass
@hash = {}
@arr = []
@a = []
IO.foreach("ComuneCA.txt") do |riga|
codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)
@hash.store("#{mail}","#{cognome} #{nome}")
end
IO.foreach("mail.log") do |riga1|
if riga1.match(/Passed/)
@a=riga1.scan(/<(.*?@.*?)>|\(\?\)/)
@hash.each_key do |mail|
if @a.include?(mail)
puts "#{mail} trovato"
elsif
puts "non trovato!!!"
end
end
puts @a.first.class
end
end
end
mi e' stato sugerito di controllare il risultato di puts @a.first.class
ed effettivamente ritorna un array, infatti @a e' un array.
Dovrebbe essere regolare?
Ma cosa fanno quei metodi first.class?
Successivamente ho modificato, sempre dietro suggerimento, la
@a=riga1.scan(/<(.*?@.*?)>|\(\?\)/) in
@a=riga1.scan(/<(.*?@.*?)>|\(\?\)/).flatten.compact, dopo questa
modifica magicamente tutto funziona.
Qualcuno potrebbe spiegarmi?
Grazie mille.
Maggiori informazioni sulla lista
Ml