6

我正在尝试摆脱括号[]和新行\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也许我用错了。

4

6 回答 6

24

还要考虑 File.readlines 中的可选 chomp 参数

File.readlines("/path/to/file", chomp: true)
于 2020-03-20T11:10:17.583 回答
12

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

"\tgoodbye\r\n".strip   #=> "goodbye"
于 2015-09-27T02:29:08.217 回答
3

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

当你使用:

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

返回的值不是字符串,而是具有 1 个随机样本的数组。IE:

["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

此外,在打印时,如果您创建一个字符串来包含您想要的所有空格和格式会更好。IE:

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}."
于 2015-09-27T03:03:40.290 回答
1

如果:

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

只是:

puts [name1, name2, name3].map { |a| a.first.strip }.join('')
  #=> JoshBobbyGreen
于 2015-09-27T02:51:44.623 回答
0

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

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

以免得到sample不带参数的数组使用方法:

File.read('first.txt').split("\n").sample
于 2019-03-28T17:45:32.077 回答
-1
puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join
于 2016-01-29T06:44:24.810 回答