如何在Ruby中读取文件时删除换行符

问题描述 投票:4回答:5

我正试图摆脱括号[]和新线\n被打印。

我的代码看起来像:

name1 = File.readlines('first.txt').sample(1)
name2 = File.readlines('middle.txt').sample(1)
name3 = File.readlines('last.txt').sample(1)

name = print (name1.strip 
    print name2.strip 
    print name3.strip)

puts name

我希望输出看起来像JoshBobbyGreen。但是,它看起来像:

[\"Josh\\n\"][\"Bobby\\n\"][\"Green\\n\"]

我尝试过使用.gsubchompsplit,但也许我错了。

ruby line newline file-read chomp
5个回答
3
投票

您的代码存在一个小问题,导致您遇到的结果。

当你使用:

name1 = File.readlines('first.txt').sample(1)

返回值不是String,而是具有1个随机样本的Array。即:

["Jhon"]

这就是为什么在使用["Jhon"]时得到输出print的原因。

由于您期望(并且更喜欢)字符串,请尝试以下方法:

name1 = File.readlines('first.txt').sample(1)[0]
name2 = File.readlines('middle.txt').sample(1)[0]
name3 = File.readlines('last.txt').sample(1)[0]

要么:

name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop

或者,可能是你的意思,没有参数,sample将返回一个对象而不是一个数组:

name1 = File.readlines('first.txt').sample
name2 = File.readlines('middle.txt').sample
name3 = File.readlines('last.txt').sample

此外,在打印时,最好是创建一个字符串以包含所需的所有空格和格式。即:

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}."

10
投票

puts在输出结尾添加换行符。打印没有。使用打印。它可以解决您的问题。另外,使用.strip。

"\tgoodbye\r\n".strip   #=> "goodbye"

1
投票

如果:

name1 = ["Josh\n"]
name2 = ["Bobby\n"]
name3 = ["Green\n"]

只是:

puts [name1, name2, name3].map { |a| a.first.strip }.join('')
  #=> JoshBobbyGreen

0
投票
puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join

0
投票

为了避免多余的\n,我宁愿使用split

File.read('first.txt').split("\n") # double quotes are important!

为了避免数组使用没有参数的sample方法:

File.read('first.txt').split("\n").sample
© www.soinside.com 2019 - 2024. All rights reserved.