读取 Ruby 中的文件时如何删除换行符
How to remove line break when reading files in Ruby
我正试图摆脱括号 []
和新行 \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\"]
我试过使用 .gsub
、chomp
和 split
,但也许我用错了。
puts 在输出末尾添加一个换行符。打印没有。
使用打印。它可能会解决您的问题。另外,使用 .strip.
"\tgoodbye\r\n".strip #=> "goodbye"
如果:
name1 = ["Josh\n"]
name2 = ["Bobby\n"]
name3 = ["Green\n"]
只是:
puts [name1, name2, name3].map { |a| a.first.strip }.join('')
#=> JoshBobbyGreen
您的代码有一个小问题导致了您遇到的结果。
当您使用:
name1 = File.readlines('first.txt').sample(1)
return编辑的值不是一个字符串,而是一个包含 1 个随机样本的数组。即:
["Jhon"]
这就是使用 print
时得到输出 ["Jhon"]
的原因。
既然您期望(并且更喜欢)一个字符串,请试试这个:
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
将return一个对象而不是数组:
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}."
puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join
为了避免多余的 \n
我宁愿使用 split
:
File.read('first.txt').split("\n") # double quotes are important!
为了避免使用不带参数的 sample
方法获取数组:
File.read('first.txt').split("\n").sample
还要考虑 File.readlines
中的可选 chomp 参数
File.readlines("/path/to/file", chomp: true)
我正试图摆脱括号 []
和新行 \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\"]
我试过使用 .gsub
、chomp
和 split
,但也许我用错了。
puts 在输出末尾添加一个换行符。打印没有。 使用打印。它可能会解决您的问题。另外,使用 .strip.
"\tgoodbye\r\n".strip #=> "goodbye"
如果:
name1 = ["Josh\n"]
name2 = ["Bobby\n"]
name3 = ["Green\n"]
只是:
puts [name1, name2, name3].map { |a| a.first.strip }.join('')
#=> JoshBobbyGreen
您的代码有一个小问题导致了您遇到的结果。
当您使用:
name1 = File.readlines('first.txt').sample(1)
return编辑的值不是一个字符串,而是一个包含 1 个随机样本的数组。即:
["Jhon"]
这就是使用 print
时得到输出 ["Jhon"]
的原因。
既然您期望(并且更喜欢)一个字符串,请试试这个:
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
将return一个对象而不是数组:
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}."
puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join
为了避免多余的 \n
我宁愿使用 split
:
File.read('first.txt').split("\n") # double quotes are important!
为了避免使用不带参数的 sample
方法获取数组:
File.read('first.txt').split("\n").sample
还要考虑 File.readlines
中的可选 chomp 参数File.readlines("/path/to/file", chomp: true)