Gotcha
On May 14, 2015 7:05 PM, “Maurizio De Santis”
[email protected]
E infatti my fault:
If you do not explicitly specify an initial value for memo, then the
first element of collection is used as the initial value of memo.
Il giorno gio 14 mag 2015 19:14 maurizio de magnis <
[email protected]> ha scritto:
scusate ragazzi ma giuro che non vi seguo …
perche il segno * è presente qui:
sum = Dir[’*.txt’]
avendo sempre un nome diverso i file non vedo come potrei risolvere
Mmh, ma sai che forse no?
Forse basta aggiungere || 0 in coda alla inject.
On May 14, 2015 7:05 PM, “Maurizio De Santis”
[email protected]
Ti consiglio vivamente di:
- aprire il terminale
- posizionarti nella cartella contenente i file .txt
- lanciare la console Ruby con: irb
- provare ad eseguire alcuni comandi come: Dir[’*.txt’]
è il principale vantaggio di Ruby
2015-05-14 22:35 GMT+02:00 Francesco V. <
[email protected]>:
- nei nomi dei file spesso indica una wildcard, cioè tutto ciò che c’è
in
quel punto: per cui con *.txt prendi tutti i file che finiscono per .txt
Il giorno gio 14 mag 2015 22:44 maurizio de magnis <
[email protected]> ha scritto:
In realtà con la tua osservazione ho pensato che la mia soluzione non
coprisse il caso in cui Dir[‘*.txt’].count == 0
Infatti [].inject(&:+) # => nil
2015-05-14 19:15 GMT+02:00 Maurizio De Santis
[email protected]:
per esempio eseguendo il programma e avendo come:
subtotale = 9
#salvando il file nella cartella entrate:
current_timestamp = Time.now.strftime(’%F_%H-%M-%S_%z’)
entrate = “entrate/subtotale_#{current_timestamp}.txt”
File.write entrate, subtot
#eseguendo il programma varie volte mi ritrovo vari file nella
#cartella entrate ad esempio
subtotale_2015-05-15_08-14-39_+0200.txt
subtotale_2015-05-15_08-30-30_+0200.txt
#a fine giornata devo eseguire l’operazione di sommare i vari subtotale
quindi a questo punto
chiusura = gets.chomp
if chiusura == ‘chiusura serale’
sum = Dir[‘entrate/*.txt’].map do |entrate|
File.read(entrate)
end.map do |content|
content.strip.to_f
end.inject(&:+)
non riesco a capire come riuscire a sommarli
Continuo a non capire quali valori dovrei inserire se non ho un nome
fisso per i file dato che cambia continuamente la data e l’ora .
Poi non capisco come avviare irb partendo dalla directory del programma
dal tuo codice
testi = Dir[‘entrate/*.txt’].map do |entrate|
File.read(entrate)
end
testi # [“1”,“2.3”,“3”]
valori = testi.map do |content|
content.strip.to_f
end
valori # [1.0, 2.3, 3.0]
sum = valori.inject(&:+)
sum # 6.3
gioca con irb per vedere cosa sisalva nelle variabili come ti
suggerivano
Gio
Il 15/mag/2015 08:48 “Francesco V.”
[email protected]
ha scritto:
Ad esempio scrivo
C:\Users\PC>desktop\meva\entrate\irb
non va , mi parte avviando normalmente cosi :
C:\Users\PC>irb
scusami per la mia stupidaggine se lo ripeto ancora una volta,
allora apro il prompt dei comandi e scrivo la directory dei file
desktop\meva\entrate e premo invio
e mi restituisce questo
“desktop\meva\entrate” non è riconosciuto come comando interno o
esterno,
un programma eseguibile o un file batch.
come faccio a posizionarmi nella cartella e lanciare il comando ruby -e
‘p Dir["*.txt"]’
Continuo a non capire quali valori dovrei inserire se non ho un nome
fisso per i file dato che cambia continuamente la data e l’ora .
Allora fai cos:
- Tramite terminale posizionati nella cartella d’interesse: cd
/percorso/verso/entrate - Lancia questo comando: ruby -e ‘p Dir["*.txt"]’
Vedrai la lista dei tuoi file .txt: questo perch “*.txt” sta per “prendi
tutti i file che finiscono con .txt”.
Poi non capisco come avviare irb partendo dalla directory del programma
Basta che prima di lanciare irb entri nella cartella d’interesse:
cd /percorso/verso/entrate
irb
–
Maurizio De Santis
Il giorno 15 maggio 2015 11:13, Francesco V. <
[email protected]> ha scritto:
Devi fare cd: cd C:/users/PC/desktop/meva/entrate
Il giorno ven 15 mag 2015 14:09 Francesco V. <
[email protected]> ha scritto:
ok ora si , a cosa si riferisce cd
finalmente ho capito come utilizzare al meglio un altro importantissimo
strumento irb, tuttavia posso dire al programma di leggere questi file
ma il ragionamento logico con il quale far si che li sommi tra di loro
non riesco proprio a capirlo
Guarda, fondamentalmente la logica questa:
- Prendi la lista di tutti i file della cartella
- Ne tiri fuori i rispettivi contenuti
- Li converti in interi
- Sommi le conversioni ottenute
Per cui:
1.
files_list = Dir[‘entrate/*.txt’]
2.
files_contents = files_list.map { |v| File.read(v) }
3.
numbers = files_contents.map { |v| v.to_i }
4.
sum = numbers.reduce(&:+)
–
Maurizio De Santis
Il giorno 15 maggio 2015 14:55, Francesco V. <
[email protected]> ha scritto:
=begin
Un altro problema sugli array che ho riscontrato è qst:
Ho bisogno di trovare un elemento specifico dell’array e trovata una
corrispondenza, lo faccio passare come parametro di un metodo
Esempio:
=end
prodotti = [‘pasta’, ‘pane’, ‘farina’, ‘etc’]
prezzi = [ 1.00, 2.00, 3.00, 4.00 ]
def spesa alimenti, prezzo
puts 'prezzo del ’ + alimenti + ’ = ’ + prezzo.to_s
puts ‘Quanto prodotto ti serve?’
richiesta = gets.chomp.to_i
totale = richiesta * (prezzo.to_i)
puts’ Totale: $ ’ + totale.to_s
end
Apertura programma
puts ‘Quali prodotti intendi acquistare ?’
operazione = gets.chomp
if operazione == ‘pasta’
spesa prodotti[0], prezzi[0]
elsif operazione == ‘pane’
spesa prodotti[1], prezzi[1]
elsif operazione == ‘farina’
spesa prodotti[2], prezzi[2]
else
puts ‘operazione non disponibile’
end
=begin
E’ ovvio che così avro una ripetizione di codice assurda quindi devo
trovare il modo per far cercare alla variabile “operazione” uno
specifico elemento che non appena viene trovato sia passato come
parametro.
Ho provato ad usare alcuni metodi della classe “enumerable”
ma senza successo sarei molto felice se qualcuno mi potesse aiutare
=end
=begin
un saluto a tutti, da qualche giorno ho necessita di risolvere una
questione.
Vorrei sapere se, passando come parametro di un metodo un elemento di un
array, elaborandolo all’interno del metodo posso andarlo a sostituire
all’interno dell’array da cui è stato preso. Per esempio avendo una
situazione del genere:
=end
array = [10, 20, 30, 40]
def sommare primo_elemento
puts ‘Inserire il numero da sommare al primo elemento’
richiesta = gets.chomp
somma = richiesta + primo_elemento
end
sommare 10
=begin
devo andare a sostituire il valore del primo_elemento dell’array “10”
con il valore dato dalla variabile somma ( se per esempio avremmo
inserito “5”) l’array risultante dovrebbe avere questi elementi :
[15, 20, 30, 40]
spero di essere stato chiaro e ringrazio tutti quelli che mi daranno una
mano in questa piccola questione
=end