/ / RUBY: ¿Lee el archivo de texto en una matriz 2D, al mismo tiempo que elimina las nuevas líneas? - Rubí sobre rieles, rubí, matrices, bucles

RUBY: ¿Lees archivos de texto en una matriz 2D, mientras que también eliminas las nuevas líneas? - ruby-on-rails, ruby, arrays, loops

Estoy tratando de ingresar texto desde un archivo, ignorandola primera línea y agregando cada carácter a una matriz 2D en un índice separado [[], []]. Hasta ahora puedo agregar los caracteres a su propio índice, pero no puedo eliminar los caracteres de nueva línea con .chomp o etc.

Quiero que mi resultado final sea

[["*",".",".","."]","[".",".","*","."]","[".",".",".","."]]

Así que eso [0][0] regresará * por ejemplo, y [0] regresará *...

Ahora mismo estoy regresando

[["*",".",".",".","n"]","[".",".","*",".","n"]","[".",".",".",".","n"]]

El código en cuestión es:

def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
line.split("").map(&:to_s)
end
end

origin_board = load_board("mines.txt")
print origin_board

Si intento el siguiente código:

def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
line.split.map(&:to_s)
end
end

origin_board = load_board("mines.txt")
print origin_board

Terminé con una matriz 2D como:

[["*..."],["..*."],["...."]]

Respuestas

0 para la respuesta № 1

Eliminar su entrada debería ayudar:

def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
#    ⇓⇓⇓⇓⇓
line.strip.split("").map(&:to_s)
end
end

String#strip eliminará los espacios en blanco al final de una cadena. La otra opción es no usar. readlines en favor de read y split por $/ (separador de línea):

def load_board(file)
board = File.read(file).split($/)[1..-1].map do |line|
line.split("").map(&:to_s)
end
end

0 para la respuesta № 2

Puedes agregar un .chomp antes del .split, como este:

def load_board(file)
board = File.readlines(file)[1..-1].map do |line|
line.chomp.split("").map(&:to_s)
end
end

No lo he probado exactamente, pero hizo algunos cambios y debería funcionar. http://repl.it/hgJ/1.