Mi spiego.
Nel codice ho m=riga1.scan(/<(.?@.?)>|(?)/).
In pratica in una riga di questo tipo
Passed, [email protected] → [email protected], Message-ID:
[email protected], Hits: -
Mi trova tutte le occorrenze corrispondenti agli indirizzi mail.
Successivamente faccio un
@hash.keys.each do |mail|
if m.include? "#{mail}"
puts "#{mail} spedito"
elsif
puts "Boh!!!!"
end
end
L’hash contiente valori del tipo "[email protected]>“nome cognome”
sono sicuro che almeno uno dei valori contenuti in mail nell’hash e’
contenuto anche in m.
Perche’ il risultato e’ sempre “Boh” cioe’ nell’array m non risulta
incluso almeno quel valore che io sono sicuro esserci?
Mauro S. wrote:
if m.include? "#{mail}"
perché? #{mail}? m.include?(mail) dovrebbe risolvere il problema.
Ciao
Domenico Delle S. wrote:
Mauro S. wrote:
if m.include? "#{mail}"
perché? #{mail}? m.include?(mail) dovrebbe risolvere il problema.
non cambia niente, ho provato anche a mettere un valore del tipo
if m.include? “[email protected]” che sono sicuro esserci ma non lo trova.
Perche’? Mi sta facendo dannare…
Proviamo a pensare che l’include?, effettivamente, veda le stringhe come
diverse; perché? Potrebbe essere un problema di codifica, magari, io ho
fatto tutto dentro irb, infatti, tu prendi i tuoi dati da un file di
log, a quanto mi sembra di capire. Se fosse questo il caso, si potrebbe
utilizzare iconv per risolvere la questione.
Esempio?
Scusa ma sono alle prima armi con ruby.
Mauro S. wrote:
non cambia niente, ho provato anche a mettere un valore del tipo
if m.include? “[email protected]” 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?.
L’unica differenza rispetto al tuo codice è che io ho usato
Hash.each_key, al posto del tuo Hash.keys.each, ma non mi sembra una
differenza sostanziale e, comunque sia, anche provando con
Hash.keys.each mi funziona ugualmente.
Proviamo a pensare che l’include?, effettivamente, veda le stringhe come
diverse; perché? Potrebbe essere un problema di codifica, magari, io ho
fatto tutto dentro irb, infatti, tu prendi i tuoi dati da un file di
log, a quanto mi sembra di capire. Se fosse questo il caso, si potrebbe
utilizzare iconv per risolvere la questione.
Ciao
On 4/7/07, Mauro S. [email protected] wrote:
puts "#{mail} spedito"
elsif
puts "Boh!!!!"
end
end
Di che tipo è l’oggetto cercato dentro a m? Se non è una stringa, la
include? fallisce perché tu la stai confrontando con una stringa (
“#{mail}” equivale a mail.to_s)
M
Domenico Delle S. wrote:
Mauro S. wrote:
non cambia niente, ho provato anche a mettere un valore del tipo
if m.include? “[email protected]” 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.