Forum: Italian Ruby user group Uso dei blocchi

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
6f15eff3cbdf016983d831363117b9b7?d=identicon&s=25 Stefano De nigris (stewie)
on 2009-04-01 16:34
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???
D716730ae3c9f3322f49d002192befc6?d=identicon&s=25 Alessandro Scolavino (ninjinka)
on 2009-04-01 18:06
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
6f15eff3cbdf016983d831363117b9b7?d=identicon&s=25 Stefano De nigris (stewie)
on 2009-04-02 10:39
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??). :D
D716730ae3c9f3322f49d002192befc6?d=identicon&s=25 Alessandro Scolavino (ninjinka)
on 2009-04-02 11:29
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
6f15eff3cbdf016983d831363117b9b7?d=identicon&s=25 Stefano De nigris (stewie)
on 2009-04-02 15:48
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
D716730ae3c9f3322f49d002192befc6?d=identicon&s=25 Alessandro Scolavino (ninjinka)
on 2009-04-02 21:25
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 ==
6f15eff3cbdf016983d831363117b9b7?d=identicon&s=25 Stefano De nigris (stewie)
on 2009-04-03 10:29
Ale grazie per l'aiuto...funziona.;)

Ciao a tutti!!!!
This topic is locked and can not be replied to.