Ciao avrei un problema con l’istruzione gsub,che non riesco a
risolvere.Ho un testo da cui devo sostituire alcune parole con altre,e
uso agevolmente la funzione gsub.Tuttavia ho un problema con una
sostituizione…io ho una frase fatta in questo modo:
write (qualcuno.nome,’ ‘,qualcuno.cognome,’ ha ',qualcuno.eta);
dove devo sostituire qualcuno con persona.Adesso voi direte che posso
fare facilmente .gsub(/qualcuno/,‘persona’) pero noo posso fare cosi
perche non esegue correttamente la sostituzione.Allora ho creato in
questo modo la conversione:
dove camb=“…frase…”,ma facendo in questo modo mi esce:
puts qualcuno.fetch(“nome”),’ ‘,qualcuno.fetch(“cognome”),’ ha
',qualcuno.fetch(“eta”)
io vorrei che invece di qualcuno.fetch(“nome”) ci fosse
persona.fetch(“nome”). Ma non posso mettere facilmente al posto di 1 →
persona perche persona potrebbe cambiare e diventare uomo(questo lo
sceglie l’utente),inoltre questa variabile che digita l’utente è
memorizzato in una variabile globale chiamata $record.Io avevo pensato
che si potesse fare in questo modo:
write (qualcuno.nome,’ ‘,qualcuno.cognome,’ ha ',qualcuno.eta);
il mio codice che ho creato è questo:
arr=IO.readlines(“file.txt”)
rgx = /(.): (.);/
hash = Hash.new
arr.each do |line|
if m=rgx.match(line)
hash[m[1]]= m[2] #un hash {nome=>tipo}
puts hash.inspect
end
end
if arr!=nil
lines=arr
end
for line in lines
puts line.gsub(/(\w+).(\w+)/x,‘\1.fetch(“\2”)’)
end
questo codice non fa altro che convertire il codice scritto in delphi in
codice ruby.Adesso il problema qual’è??E’ che quanto faccio:
puts line.gsub(/(\w+).(\w+)/x,‘\1.fetch(“\2”)’)
mi esce:
write qualcuno.fetch(“nome”),’ ‘,qualcuno.fetch(“cognome”),’ ha
',qualcuno.fetch(“eta”)
io invece voglio:
puts persona.fetch(“nome”),’ ‘,persona.fetch(“cognome”),’ ha
',persona.fetch(“eta”)
dove persona è una parola digitata dall’utente che è memorizzata in una
variabile globale ($record).Avevo pensato di fare cosi:
E’ un po’ meno bella della proposta originale, per via del +, ma
funziona.
L’output è
write (persona.fetch(“nome”),’ ‘,persona.fetch(“cognome”),’ ha
',persona.fetch(“eta”));
Resta da sostituire write con puts, togliere il ; finale e concatenare
gli argomenti della write nel modo appropriato per la puts, ma questa è
un’altra storia.
Paolo
Stefano De nigris wrote:
eccoti l’esempio.Io ho un file txt in cui è scritto:
write (qualcuno.nome,’ ‘,qualcuno.cognome,’ ha ',qualcuno.eta);
il mio codice che ho creato è questo:
arr=IO.readlines(“file.txt”)
rgx = /(.): (.);/
hash = Hash.new
arr.each do |line|
if m=rgx.match(line)
hash[m[1]]= m[2] #un hash {nome=>tipo}
puts hash.inspect
end
end
if arr!=nil
lines=arr
end
for line in lines
puts line.gsub(/(\w+).(\w+)/x,‘\1.fetch(“\2”)’)
end
questo codice non fa altro che convertire il codice scritto in delphi in
codice ruby.Adesso il problema qual’è??E’ che quanto faccio:
puts line.gsub(/(\w+).(\w+)/x,‘\1.fetch(“\2”)’)
mi esce:
write qualcuno.fetch(“nome”),’ ‘,qualcuno.fetch(“cognome”),’ ha
',qualcuno.fetch(“eta”)
io invece voglio:
puts persona.fetch(“nome”),’ ‘,persona.fetch(“cognome”),’ ha
',persona.fetch(“eta”)
dove persona è una parola digitata dall’utente che è memorizzata in una
variabile globale ($record).Avevo pensato di fare cosi:
Resta da sostituire write con puts, togliere il ; finale e concatenare
gli argomenti della write nel modo appropriato per la puts, ma questa è
un’altra storia.
Questo è già fatto :D.Grazie comunque.
Ciao,
spero di aver capito quello che volevi.prova
così:
puts line.gsub(/(\w+).(\w+)/x,“#$record.fetch("\2")”)
se crea una stringa con il singolo apice non puoi usare la sostituzione
di
espressioni con #{espr}, per farlo devi creare la stringa con i doppi
apici
o con %Q
Il giorno 11 aprile 2009 16.47, Stefano De nigris [email protected]ha scritto:
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.