# Uso dei blocchi

**URL:** <https://www.ruby-forum.com/t/uso-dei-blocchi/164455>\
**Category:** IT\
**Created:** [April 1, 2009, 4:34pm UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455 "2009-04-01T16:34:05Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 1, 2009, 4:34pm UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/1 "2009-04-01T16:34:05Z")

</div>

Ciao ragazzi io ho un problema con un blocco,cioÃ¨ non riesco a far  
stampare il contenuto di un hash che viene creato con un blocco.Ora vi  
spiego il tutto…  
io ho questo testo:  
type  
persona=record  
etÃ : byte;  
nome: string[50];  
cognome: string[50]:  
professione: stringz[55];  
end;

e ho creato questo programma:

arr=IO.readlines(“record.txt”) #dove record.txt Ã¨ il file che  
contiene il  
valore=0 #testo  
for i in 0 … arr.size-1  
primariga=arr[valore].split(/\s/)  
valore=valore+1

elements = primariga  
puts elements.class  
rgx = / (._):(._);/ # spazio, nome, “:” valore, “;”  
hash = {}  
elements.each do |line|  
if m=rgx.match(line)  
hash[m[1]]= m[2] #un hash {nome=\>tipo}  
end  
end  
puts hash  
end

In pratica il programma prende ogni frase del testo e vi ci lavora  
sopra,cioÃ¨ esegue il blocco.Il mio scopo Ã¨ quello che venga memorizzato  
in un hash il contenuto di:etÃ : byte;  
nome: string[50];  
cognome: string[50]:  
professione: stringz[55];  
dove nome Ã¨ il primo elemento dell’array e il tipo di variabile Ã¨ il  
secondo elemnto.  
Il mio problema Ã¨ che se eseguo il tutto non mi viene visualizzato  
nulla,come se il blocco non trovasse nulla da memorizzare.Dove  
sbaglio???

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 1, 2009, 6:06pm UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/2 "2009-04-01T18:06:00Z")

</div>

Stefano De nigris wrote:

> rgx = / (._):(._);/ # spazio, nome, “:” valore, “;”  
> hash = {}  
> elements.each do |line|  
> if m=rgx.match(line)  
> hash[m[1]]= m[2] #un hash {nome=\>tipo}  
> end  
> end  
> puts hash  
> end

Non uso mai le regular expression, perÃ² rgx.match(line) non mi sembra  
restituisca un array… prova a mettere una puts m.inspect subito dopo  
la if e vedi se m Ã¨ un array o una stringa

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 2, 2009, 11:29am UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/3 "2009-04-02T11:29:18Z")

</div>

ok, direi che hai fatto un pÃ² troppi split 🙂

prova cosÃ¬(ho cambiato qualche metodo per farlo + pulito)

file = File.new(“record.txt”, “r”)  
rgx = / (._):(._);/ # spazio, nome, “:” valore, “;”  
hash = Hash.new

while (line = file.gets)  
if m=rgx.match(line)  
hash[m[1]]= m[2] #un hash {nome=\>tipo}  
end  
end  
puts hash.inspect

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 2, 2009, 3:48pm UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/4 "2009-04-02T15:48:43Z")

</div>

Ale grazie il programma funzione,l’unica cosa Ã¨ che io ho creato tutto  
il mio programma sull’istruzione:

> arr=IO.readlines(“prova.txt”)

c’Ã¨ un sistema alternativo delle istruzione che mi hai consigliato in  
modo da adattarsi a questo???  
Mi potresti spiegare di preciso il comando gets.  
Ciao

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 2, 2009, 10:39am UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/5 "2009-04-02T10:39:20Z")

</div>

Ciao ale,ecco cosa mi esce:  
5024  
Array

Array

Array

Array

Array

Array

Array

quindi sono tutti array.Ma quello che io mi domando Ã¨…di preciso a  
cosa serve line???Perche l’if fa il confronto tra rgx e line,ma io a  
line non gli ho assegnato niente(che confronto farebbe??). 😃

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 2, 2009, 9:25pm UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/6 "2009-04-02T21:25:11Z")

</div>

Stefano De nigris wrote:

> Ale grazie il programma funzione,l’unica cosa Ã¨ che io ho creato tutto  
> il mio programma sull’istruzione:
> 
> > arr=IO.readlines(“prova.txt”)
> 
> c’Ã¨ un sistema alternativo delle istruzione che mi hai consigliato in  
> modo da adattarsi a questo???  
> Mi potresti spiegare di preciso il comando gets.  
> Ciao

a grandi linee fanno la stessa cosa, ho usato il while perchÃ¨ mi  
sembrava + pulito, il tuo codice con IO.readlines Ã¨ analogo:

arr=IO.readlines(“record.txt”)  
rgx = / (._):(._);/ # spazio, nome, “:” valore, “;”  
hash = Hash.new

arr.each do |line|  
if m=rgx.match(line)  
hash[m[1]]= m[2] #un hash {nome=\>tipo}  
end  
end  
puts hash.inspect

cosÃ¬ dovrebbe andare ==

---

<div class="post-metadata">

**Author:** ![stewie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f07891/32.png) [@stewie](https://www.ruby-forum.com/u/stewie)\
**Post date:** [April 3, 2009, 10:29am UTC](https://www.ruby-forum.com/t/uso-dei-blocchi/164455/7 "2009-04-03T10:29:11Z")

</div>

Ale grazie per l’aiuto…funziona.😉

Ciao a tutti!!!
