Aiuto su un problema

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 :wink:

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 :slight_smile:
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:

  1. Prendi la lista di tutti i file della cartella
  2. Ne tiri fuori i rispettivi contenuti
  3. Li converti in interi
  4. 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