# Consigli sugli array

**URL:** <https://www.ruby-forum.com/t/consigli-sugli-array/243658>\
**Category:** IT\
**Created:** [December 16, 2015, 6:07pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658 "2015-12-16T18:07:26Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafa\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/958977/32.png) [@Rafa\_F](https://www.ruby-forum.com/u/Rafa_F)\
**Post date:** [December 16, 2015, 6:07pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/1 "2015-12-16T18:07:26Z")

</div>

=begin  
un saluto a tutti, da qualche giorno ho avuto dei problemi usando gli  
array e vorrei avere qualche consiglio su come affrontarli al meglio.  
Vorrei sapere se, passando come parametro di un metodo un elemento di un  
array, ed elaborandolo all’interno del metodo, posso andare a sostituire  
il valore ottenuto con il valore all’interno dell’array che ho preso  
come parametro. Piu semplicemente 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  
quindi 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 dovra risultare modificato con 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

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 16, 2015, 6:30pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/2 "2015-12-16T18:30:02Z")

</div>

=begin  
Un altro problema sugli array che ho avuto è 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 uno specifico elemento nell’array, che  
corrisponda al valore che inserisco nella variabile “operazione” e non  
appena viene trovato lo deve passare come parametro del metodo.

Ho provato ad usare alcuni metodi della classe “enumerable”  
ma senza successo, il metodo include non sembra essere utile in questo  
caso e non so piu cosa fare. Ho cercato per giorni nei documenti ma non  
riesco a trovare la soluzione sarei molto felice se qualcuno mi  
aiutasse.  
=end

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 17, 2015, 5:54pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/3 "2015-12-17T17:54:09Z")

</div>

=begin Finalmente sto riuscendo a farcela ma ho un problema chiamando un  
metodo che per il primo turno non da errore mentre se lo richiamo altre  
volte da qst errore:

no implicit conversion from nil to integer (TypeError)  
l’esempio è qst:

=end

def cercaprezzo prod, prezzo\_reparto

trovaindice = @reparto1.index(prod)

@prezzo = prezzo\_reparto [trovaindice]

end

@categoria = [@reparto1 =[‘pasta’, ‘pane’, ‘farina’, ‘etc’], @reparto2  
= [‘carne’, ‘latte’, ‘uova’] ]

prezzi = [@prezzi\_reparto1= [1.00, 2.00, 3.00, 4.00], @prezzi\_reparto2  
= [5, 6 ,7] ]

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

puts ‘Quali prodotti intendi acquistare ?’  
operazione = gets.chomp

if @reparto1.include? operazione

cercaprezzo operazione, @prezzi\_reparto1  
spesa operazione, @prezzo

elsif @reparto2.include? operazione

cercaprezzo operazione, @prezzi\_reparto2  
spesa operazione, @prezzo

puts ‘ciao’

end

#non capisco perche si aspetta un NIL apposto di un intero

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 21, 2015, 7:27pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/4 "2015-12-21T19:27:26Z")

</div>

Salve a tutti qualcuno sà spiegarmi perchè il comando delete non prende  
questo argomento

File.delete (‘cartella/\*.txt’)

mentre se specifico il nome di ogni file lo prende come ad esempio:

File.delete (‘cartella/file1.txt’, ‘cartella/file2.txt’, etc … )

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 18, 2015, 5:55pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/5 "2015-12-18T17:55:38Z")

</div>

Buona sera a tutti , a poco a poco sono riuscito a risolvere alcuni dei  
tanti quesiti, uno di questi però non riesco proprio a risolverlo.

Devo far leggere al programma un file di testo contenente un elenco di  
Array. Fin qui ci siamo, il problema è che leggendo il contenuto, il  
programma non riesce ad interpretarlo per quello che è cioè una serie di  
array.  
Non capisco se lo vede come stringa oppure vede effettivamente gli  
oggetti  
che contiene. qualcuno saprebbe darmi una risposta?

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 22, 2015, 1:10pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/6 "2015-12-22T13:10:08Z")

</div>

Innanzitutto grazie mille per il consiglio mi può sempre tornare utile,  
il problema xò è che i file non hanno un nome statico cioè :  
File1, File2, File3 .

nel mio caso hanno questi nomi :

subtotale\_2015-12-22\_12-24-45\_+0100, subtotale\_2015-12-22\_13-00-45\_+0100

cambia sempre il timestamp.  
a me basterebbe un metodo con il quale eliminare tutto il contenuto  
della cartella .

Utilizzando File.delete nn funziona  
Ho provato a eliminare l’intera cartella ma neanche questo funziona  
perche si tratta di una cartella piena.

Non so davvero piu cosa fare ho googlato in giro ma nessuno parla di  
come svuotare una cartella.

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 22, 2015, 3:31am UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/7 "2015-12-22T03:31:51Z")

</div>

Francesco V. wrote in post #1180113:

> Salve a tutti qualcuno sà spiegarmi perchè il comando delete non prende  
> questo argomento
> 
> File.delete (‘cartella/\*.txt’)
> 
> mentre se specifico il nome di ogni file lo prende come ad esempio:
> 
> File.delete (‘cartella/file1.txt’, ‘cartella/file2.txt’, etc … )

Ciao francesco! Anche io sto imparando Ruby non sono un senior developer  
ma provero ad aiutarti mi sa che stai chiedendo alla funzione delete di  
cercare un File chiamato “\*.txt” Se questo file non si trova, non lo  
prendera. Prova a fare una concatenazione in questa forma:

File.delete('cartella/file#{num}.txt")

Allora, questo #{num} indica una concatenazione in teoria quello che fa  
e aggiungere un testo a un’altro, allora se abbiamo 2 file per essempio  
facciamo uso delle strutture repetitive, che faranno la stessa cosa una  
e un’altra volta finche finisce il ciclo o trova un errore.

Qua andiamo avanti dal’file numero 1 al file numero 2.

Prima cerca il file con il numero 1 la seconda volta cerchera un file  
con il numero 2 e cosi via

class Leggi\_file  
for num in 1..2  
File.delete(“cartella/file#{num}.txt”)  
end  
end

Nel tuo caso puoi modificare il 2 per il numero che vuoi, spero ti aiuti

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 22, 2015, 2:52pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/8 "2015-12-22T14:52:39Z")

</div>

Ci sono quasi riuscito con il tuo script, guarda qui :

@lista\_file = Dir[‘percorso/\*.txt’] #cioè tt i file con estensione txt

@numero\_file = @lista\_file.map { |v| v.to\_i }# cioè il n.dei file  
presenti

def elimina

for num in 0…10 # ecco qui dovrei sostituire a 10 il numero\_file

for num in 0…@numero\_file # il metodo for xò accetta solo interi anche  
se la variabile numero\_file contiene un intero

File.delete("#{@lista\_file[num]}")

# qui passo uno per uno il contenuto dell’array lista\_file al metodo

delete solo che bisogna sapere il numero esatto delle posizioni  
assegnate nell’array. Il problema è che nn riesco a far passare al  
metodo for la variabile numero\_file , cioè bisogna trasformare una  
variabile in un intero per poi passarlo al metodo for.

end  
end

elimina

---

<div class="post-metadata">

**Author:** ![pollopoop92](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a6a055/32.png) [@pollopoop92](https://www.ruby-forum.com/u/pollopoop92)\
**Post date:** [December 22, 2015, 3:53pm UTC](https://www.ruby-forum.com/t/consigli-sugli-array/243658/9 "2015-12-22T15:53:05Z")

</div>

Ok, bravo a provarci. Allora, ti consiglio di utilizzare la struttura  
while, questa continuara a ripetere la stessa azione mentre sia vero il  
condizionale, la struttura generalmente e questa:

while condizionale do  
#Un paio di righe di codice  
end

Nel tuo caso puoi provare a fare:

i=0 #Facciamo i=0 cosi sappiamo da dove iniziare  
while i \<= numero\_file do #Continua a ripetere questo finche i e menore  
o uguale a numero\_file  
File.delete(“#{@lista\_file[num]}”)  
end

Al momento non sono a casa percio non lo posso provare. Anche ti posso  
consigliare questa pagina:

> **[Ruby - Loops](http://www.tutorialspoint.com/ruby/ruby_loops.htm)**
>
> Ruby Loops - Loops in Ruby are used to execute the same block of code a specified number of times. This chapter details all the loop statements supported by Ruby.

E questa : [Ruby - File I/O](http://www.tutorialspoint.com/ruby/ruby_input_output.htm)

Tanti saluti
