Error inesperado de keyword_end, pero la syntax parece estar bien

Se supone que esta función extrae los nombres de un archivo de valores separados por comas y los coloca en una matriz.

def xprt_csv_to_ary(csv_file) namecatcher_regex = "/^[\.{1}]([AZ]+)\.{3}/" # Matches up to char before next name current_word = 0 names_array = [] while current_word < 5000 if current_word == 0 name = csv_file.readline.match(namecatched_regex) else name = csv_file.past_match.match(namecatcher_regex) end names_array[current_word] = name current_word ++ end return names_array end 

Me aparece el siguiente error:

 syntax error, unexpected keyword_end 

Estaría tan feliz de ser referido a una pregunta existente que resuelve mi problema como para que alguien me responda directamente.

Tu error proviene de la línea:

 current_word ++ 

No hay tal syntax en Ruby. Debería ser:

 current_word += 1 

Además, creas tu expresión regular de forma incorrecta. Debería ser:

 namecatcher_regex = /^[\.{1}]([AZ]+)\.{3}/ 

Puede haber algunos otros errores que no noté.

En esta línea:

 current_word ++ 

Le está diciendo a Ruby que agregue algo a current_word , pero nunca le dice qué agregar, sino que end directamente en la siguiente línea. Te estás perdiendo el operando al unario + . Debería ser algo así como

 current_word + something_else 

o

 current_word + +something_else 

En Ruby, el espacio en blanco está permitido alrededor de los operadores, por lo que

 a + b # equivalent to a + b, which is equivalent to a.+(b) 

e incluso

 + a # equivalent to +a, which is equivalent to a.+@() 

está perfectamente bien, así que si combinas los dos, obtienes eso

 a + + b # equivalent to a + +b, which is equivalent to a.+(b.+@()) 

también está perfectamente bien, y dado que el espacio en blanco alrededor de operandos está perfectamente bien pero es opcional,

 a+b 

y

 a ++ b # equivalent to a + +b as above 

también está perfectamente bien.

Es por eso que solo obtiene el error en la siguiente línea con el end , porque solo Ruby puede decir que le falta el operando al operador prefijo + único.