# Non capisco perchè "syntax error, unexpected keyword\_end"

**URL:** <https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327>\
**Category:** IT\
**Created:** [November 29, 2011, 12:47am UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327 "2011-11-29T00:47:24Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [November 29, 2011, 12:47am UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327/1 "2011-11-29T00:47:24Z")

</div>

Ciao a tutti, sto imparando Ruby piano piano, però non riesco a capire  
perché il seguente codice mi dia questo errore:  
“syntax error, unexpected keyword\_end” e non mi dà nessun warning.

File.open(“prova.txt”, “r”) do |aFile|  
print |aFile|  
end

Ho impostato la tabulazione dell editor a 2 spazi. Utilizzo Sublime Text  
2.

Grazie 😉

---

<div class="post-metadata">

**Author:** ![enrico\_m](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7ab992/32.png) [@enrico\_m](https://www.ruby-forum.com/u/enrico_m)\
**Post date:** [November 29, 2011, 12:52am UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327/2 "2011-11-29T00:52:22Z")

</div>

Il 29 novembre 2011 00:47, Enrico M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

> Ciao a tutti, sto imparando Ruby piano piano, per non riesco a capire  
> il perch il seguente codice mi dia questo errore:  
> “syntax error, unexpected keyword\_end” e non mi d nessun warning.
> 
> File.open(“prova.txt”, “r”) do |aFile|  
> print |aFile|  
> end

Ciao,  
il codice corretto e’:

File.open(“prova.txt”, “r”) do |aFile|  
print aFile  
end

L’errore e’ nella riga: print |aFile|

Le pipe delimintano la lista degli argomenti del blocco, non fanno  
parte del nome della variabile. La variabile che identifica il file  
dentro al blocco preso in input dal metodo open() e’ appunto aFile e  
non |aFile|.

ciao,

Andrea F.

---

<div class="post-metadata">

**Author:** ![enrico\_m](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7ab992/32.png) [@enrico\_m](https://www.ruby-forum.com/u/enrico_m)\
**Post date:** [November 29, 2011, 11:06am UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327/3 "2011-11-29T11:06:00Z")

</div>

Grazie mille, scusatemi tanto ma non ho ancora imparato bene la  
sintassi.  
Avrei un’altra domanda Nel seguente codice come mai mi ritorna che la  
lunghezza della x é sempre 1?

x = []  
File.open(“Prova.txt”, “r”) do |aFile|  
x \<\< aFile.read.split(" ")  
end  
x.to\_a.each do |y|  
print y  
end  
print x.length

Il file “Prova.txt” é cosi:  
2 3 4  
5 3 9

---

<div class="post-metadata">

**Author:** ![enrico\_m](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7ab992/32.png) [@enrico\_m](https://www.ruby-forum.com/u/enrico_m)\
**Post date:** [November 29, 2011, 11:23am UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327/4 "2011-11-29T11:23:53Z")

</div>

Il 29 novembre 2011 11:06, Enrico M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

> Grazie mille, scusatemi tanto ma non ho ancora imparato bene la  
> sintassi.  
> Avrei un’altra domanda Nel seguente codice come mai mi ritorna che la  
> lunghezza della x sempre 1?

Ciao,

> x =   
> Qui la lunghezza zero.

> File.open(“Prova.txt”, “r”) do |aFile|  
> x \<\< aFile.read.split(" ")  
> Qui aggiungi un elemento (un array di stringhe), quindi la lunghezza  
> diventa 1.

> end  
> x.to\_a.each do |y|

Questa chiamata a to\_a totalmente inutile, un array era e un array  
resta

> print y  
> end  
> print x.length

(Scusa le mie fisime personali, ma perch print? Fa tanto BASIC…  
puts non ti piace?)

Quello che ti confonde che stampando un array si ottiene una riga  
per ogni elemento, cio, se hai  
a = [“array”, “con”, “quattro”, “elementi”]  
e scrivi:  
puts a  
ottieni:  
array  
con  
quattro  
elementi

E se questa istruzione in un ciclo, ci sono ottime probabilit di  
non capire pi niente, perch non saprai a quale ciclo stato  
stampato cosa.

Per capire meglio, o in ogni ciclo scrivi anche, che so,  
puts “\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*”

cos vedi le varie iterazioni, oppure usi  
puts y.inspect  
che ti mostrer una rappresentazione dell’array.

Tornando al tuo problema, File.read.split restituisce gi un array, se  
non hai altri elementi da aggiungere, tanto vale che tu scriva  
direttamente:  
x = File.read.split(’ ')

pietro

---

<div class="post-metadata">

**Author:** ![enrico\_m](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7ab992/32.png) [@enrico\_m](https://www.ruby-forum.com/u/enrico_m)\
**Post date:** [November 29, 2011, 2:09pm UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327/5 "2011-11-29T14:09:48Z")

</div>

Andrea P. wrote in post #1034234:

> hai usato aFile.read, significa che hai letto l’intero file in una sola  
> volta,  
> poi con “split” hai creato un unico array di elementi che stato salvato  
> nella  
> variabile “x”. pertanto “x” rappresentata in questo modo:
> 
> [[“2”, “3”, “4”, “5”, “3”, “9”] ]
> 
> come puoi notare, appunto, “x” un array che contiene un altro array,  
> quindi ha  
> 1 solo elemento 😉
> 
> per ottenere 6 elementi separati, potresti scrivere qualcosa del genere:
> 
> File.open(“Prova.txt”, “r”) do |aFile|  
> while(line = aFile.gets)  
> line.split(’ ').each do |char|  
> x \<\< char  
> end  
> end  
> end
> 
> ciao,  
> A.
> 
> Il 29/11/2011 11:06, Enrico M. ha scritto:

Fantastico! Grazie Mille era proprio ciò che volevo fare 🙂  
Pensavo che read leggesse una riga per volta 🙂

Ringrazio anche Pietro! Avevo utilizzato print proprio perchè volevo una  
rappresentazione dell’array, utilizzerò inspect 😉

---

<div class="post-metadata">

**Author:** ![enrico\_m](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7ab992/32.png) [@enrico\_m](https://www.ruby-forum.com/u/enrico_m)\
**Post date:** [November 29, 2011, 11:27am UTC](https://www.ruby-forum.com/t/non-capisco-perche-syntax-error-unexpected-keyword-end/214327/6 "2011-11-29T11:27:00Z")

</div>

hai usato aFile.read, significa che hai letto l’intero file in una sola  
volta,  
poi con “split” hai creato un unico array di elementi che stato salvato  
nella  
variabile “x”. pertanto “x” rappresentata in questo modo:

[[“2”, “3”, “4”, “5”, “3”, “9”] ]

come puoi notare, appunto, “x” un array che contiene un altro array,  
quindi ha  
1 solo elemento 😉

per ottenere 6 elementi separati, potresti scrivere qualcosa del genere:

File.open(“Prova.txt”, “r”) do |aFile|  
while(line = aFile.gets)  
line.split(’ ').each do |char|  
x \<\< char  
end  
end  
end

ciao,  
A.

Il 29/11/2011 11:06, Enrico M. ha scritto:
