Te sugerimos que revises esta resolución en un ambiente controlado antes de enviarlo a producción, un saludo.
Solución:
considere también el parámetro chomp opcional en File.readlines
File.readlines("/path/to/file", chomp: true)
puts agrega una nueva línea al final de la salida. la impresión no. Utilice la impresión. Puede resolver su problema. Además, use .strip.
"tgoodbyern".strip #=> "goodbye"
Su código tiene un problema menor que causa los resultados que está experimentando.
cuando usas:
name1 = File.readlines('first.txt').sample(1)
El valor devuelto NO ES una cadena, sino una matriz con 1 muestra aleatoria. es decir:
["Jhon"]
Es por eso que obtienes la salida. ["Jhon"]
cuando usas print
.
Ya que esperas (y prefieres) un stringintente esto en su lugar:
name1 = File.readlines('first.txt').sample(1)[0]
name2 = File.readlines('middle.txt').sample(1)[0]
name3 = File.readlines('last.txt').sample(1)[0]
o:
name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop
o, probablemente lo que quisiste decirsin argumentos, sample
devolverá un objeto en lugar de una matriz:
name1 = File.readlines('first.txt').sample
name2 = File.readlines('middle.txt').sample
name3 = File.readlines('last.txt').sample
Además, mientras imprime, sería mejor si creara uno string para incluir todos los espacios y el formato que deseaba. es decir:
name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop
puts "#name1 #name2 #name3."
# or
print "#name1 #name2 #name3."
Si para ti ha sido de ayuda este post, sería de mucha ayuda si lo compartes con otros juniors de este modo contrubuyes a difundir este contenido.