Non capisco perchè "syntax error, unexpected keyword_end"

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

Il 29 novembre 2011 00:47, Enrico M. [email protected] 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.

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

Il 29 novembre 2011 11:06, Enrico M. [email protected] 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

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

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 :slight_smile:
Pensavo che read leggesse una riga per volta :slight_smile:

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

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

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: