Ciao ragazzi, sono tornato (purtroppo per voi…)
Sto sviluppando i primi programmi con ruby, per approdare meglio a
Rails.
in particolare ne sto facendo uno (semplicissimo) che mi permetta di
gestire le ore della settimana.
vorrei che alla fine le ore finissero in un array (per memorizzare le
settimane…) ma non sono capace…
Qualcuno, che abbia tempo e soprattutto voglia, mi puo’ aiutare??
Ho usato solo puts e gets…
Allego codice e ringrazio anticipatamente…
puts "Inserisci la settimana "
$stdout.flush
sett = gets #inserisco la settimana es. 1-8ott
puts "OK. Gestiamo i dati della settimana " + sett
puts “Inserire ore gioco:”
$stdout.flush
gioco = gets
$stdout.flush
puts “Inserire ore dormire:”
$stdout.flush
dormire = gets
$stdout.flush
puts “Inserire ore studiare:”
$stdout.flush
studiare = gets
$stdout.flush
puts “Inserire ore Malattia:”
$stdout.flush
sick = gets
$stdout.flush
puts “Inserire ore Lavoro:”
$stdout.flush
lav = gets
$stdout.flush
puts “Inserire ore Straordinario:”
$stdout.flush
extra = gets
$stdout.flush
puts
puts
puts "Riepilogo: "
$stdout.flush
puts "Gioco: "+gioco
puts "Dormire: "+dormire
puts "Studiare: "+studiare
puts "Malattia: "+sick
puts "Lavoro: "+lav
puts "Straordinario: "+extra
che problema hai esattamente? non ho capito.
Ciao,
io vorrei che i dati che inserisco ogni settimana (es:inserisco
settimana 1-8ottobre) vadano in un array apposito che contenga il
riepilogo delle ore.
Così innanzitutto i dati si memorizzerebbero (il mio programma funziona
solo per la settimana corrente), ed io li potrei richiamare (es non mi
ricordo più cosa ho fatto nella settimana 12-19luglio).
Spero di essere stato un pò più chiaro.
Grazie mille.
Dovresti fare un hash di array …
La chiave dell’hash sarebbe la settimana e il contenuto sarebbe
un’array con le ore di quella settimana …
In questo modo potresti inserire il tuo riepilogo
così:sett[“1-8sett”]=[4,7,7,6,5,2]
sett[“9-16sett”]=[6,9,2,0,7,5]
e con sett[“1-8sett”] recuperi l’array contenente il riepilogo di
quella settimana.
Spero di esserti stato utile.
2006/10/19, biancoc_sdc [email protected]:
Come lo hai scritto tu sarebbe un hash di hash … ma dovresti scriverlo
così:sett[“1-8sett”]={“gioco”=>2, “dormire”=>4}
Ti consiglio di provare a farlo da irb, aiuta un sacco
Cmq se tu ti definisci un hash settimane=Hash.new e nella parte del
riepilogo lo valorizzi
così:settimane[sett]={“gioco”=>gioco,“dormire”=>dormire}
in questo modo puoi recuperare le ore di gioco della settimana
“1-8sett” facendo semplicemente settimane[“1-8sett”][“gioco”]
Se non hai problemi con l’inglese ti suggerisco “Programming Ruby”
ottimo manuale
2006/10/20, biancoc_sdc [email protected]:
Ciao Federico,
ti ringrazio per la spiegazione ma non e’ che abbia capito molto…
l’hash verrebbe fuori cosi’??
sett[“1-8sett”]=[“gioco”=>4, “dormire”=>2]
dove va inserito, come lo richiamo?
Imparero’ mai Ruby???
Federico,
ho dato un’occhiata a quanto scritto ed ho consultato un paio di guide
on line.
Ma purtoppo mi devo arrendere.
Al momento non capisco.
Se avrai tempo per scrivermi il codice compilato (funzionante, con il
mio caso) cerchero’ di studiare quello.
Sono l’ulitmo…
Grazie davvero
Non ti spaventare che si tratta di una cavolata …
Prendi il codice che hai scritto tu, inserisci come prima riga
settimane=Hash.new
poi dopo la tua riga
sett = gets #inserisco la settimana es. 1-8ott
aggiungi
settimane[sett]=Hash.new
poi modifichi tutte le righe come gioco = gets dormire = gets etc etc
… con
settimane[sett][“gioco”]=gets.to_i
settimane[sett][“dormire”]=gets.to_i
etc etc …
infine sostituisci la parte del riepilogo con
sett.each { |x,y|
puts "Settimana "+x
y.each { |w,z|
puts "Ho passato “+z.to_s+” ore a "+w
}
}
se trovi nomi più significativi di x,y,w e z forse è meglio
Dopo queste modifiche ti stampa:
Settimana 1-8sett
Ho passato 4 ore a dormire
Ho passato 2 ore a gioco
Se serve altro aiuto chiedi pure …
2006/10/20, biancoc_sdc [email protected]:
Federico,
commento il tuo codice cosi’ vediamo se quel poco che so e’ giusto…(se
i termini sono errati correggi pure…)
settimane=Hash.new #dichiarazione dell’hash
settimane[sett]=Hash.new #inizializzo l’hash
settimane[sett][“gioco”]=gets.to_i #la prima parte non la so…la seconda dovrebbe essere: quello che inserisci convertilo in intero
sett.each { |x,y| #per ogni oggetto in x
puts "Settimana "+x #stampa settimana x
y.each { |w,z| #non lo so…
puts "Ho passato “+z.to_s+” ore a "+w #non lo so…
}
}
Il tutto mi da quest’errore:
f.rb:56: undefined method `each’ for nil:NilClass (NoMethodError)
Non ho capito bene dove ho messo non lo so…se hai tempo/voglia di
spiegarmi ti sono grato…
La mia documentazione di riferimento e’ questa:
http://pine.fm/LearnToProgram/?Chapter=00
ma come vedi sono ancora piu’ che un volenteroso beginner…
Grazie per l’aiuto, davvero!!!
2006/10/20, biancoc_sdc [email protected]:
settimane=Hash.new #dichiarazione dell’hash
esatto
settimane[sett]=Hash.new #inizializzo l’hash
errato
dichiara settimane[sett] come un nuovo Hash … immaginati una
tabella, la prima riga continene “1-8sett”,“9-16sett” e così via …
mentre ogni colonna contiene i vari dati relativi alla settimana
{“gioco”=>2, “dormire”=>4} (ovviamente con valori diversi)
settimane[sett][“gioco”]=gets.to_i #la prima parte non la so…la seconda dovrebbe essere: quello che inserisci convertilo in intero
settimane[sett][“gioco”] fa riferimento alle ore di gioco della
settimana sett
sett.each { |x,y| #per ogni oggetto in x
puts "Settimana "+x #stampa settimana x
y.each { |w,z| #non lo so…
puts "Ho passato “+z.to_s+” ore a "+w #non lo so…
}
}
Il tutto mi da quest’errore:
f.rb:56: undefined method `each’ for nil:NilClass (NoMethodError)
errore mio, non è sett.each ma settimane.each
Io ti consiglio di fare tutte queste prove con irb, è comodissimo per
imparare e testare
Figurati, è sempre un piacere aiutare gli altri.
Mi spiace che tu debba usare windows
irb == interactive ruby
Sotto win non l’ho mai provato ma sotto linux ti permette di scrivere
in ruby e di vedere cosa ritorna ogni istruzione (sotto win dovrebbe
essere la stessa cosa con i più i bug di windows :-D).
Se hai altre domande fai pure
2006/10/20, biancoc_sdc [email protected]:
in SciTe sotto tools dovresti avere irb. lo lanci e poi vai nella output
window, dove puoi inserire i comandi valutati da irb.
ok grazie ragazzi.
purtoppo uso ruby perchè ho gli skills troppo bassi al momento per
passare a linux, my next goal…
Grazie davvero per la spiegazione!!!
ps:io uso scite sia come editor che come output. irb è compreso nel
pacchetto d’installazione di ruby o lo devo scaricare a parte? (ho
ruby-185-21, e nella cartella d’installazione c’è interactive ruby che è
una shell dos.)
ciao e ancora grazie!!!
oppss…volevo dire windows…
come lanci irb da scite?
tools-go?
ciao!
??? non sono certo di aver capito. forse intendevi SciTe invece di
Ruby? o
windows?
Io mi trovo bene entro SciTe la maggior parte del tempo. con rails hai
bisogno di un po più dilavoro da command line invece.
On 10/21/06, biancoc_sdc [email protected] wrote:
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
–
Chiaroscuro
: : i’m a miner : : | therubymine.com
no, tools | run-irb
dovrebbe essere impostato nello SciTe che viene con l’installation pack
di
ruby per windows.