如何在读取Ruby中的文件时删除换行符
我试图摆脱括号[]
和新行\n
被打印。如何在读取Ruby中的文件时删除换行符
我的代码如下所示:
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
尝试,但也许我使用他们错了。
您的代码,导致您所遇到的结果是一个小问题。
当你使用:
name1 = File.readlines('first.txt').sample(1)
返回值IS NOT一个字符串,而是用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
将返回一个物体而不是阵列:
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在输出结尾添加换行符。打印不。 使用打印。它可能会解决你的问题。另外,使用.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
我恰好使用'&:strip'吗?因为我在地图上定义了未定义的方法条,因为...' – marriedjane875
对不起,我没有关注。你会得到一个异常运行这个?我相信代码很好。顺便提一句,map(&:strip)与map {| s |的结果相同s.strip}'。 –
我不确定'&:strip'是否是一个排字错误 – marriedjane875
puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join
这可能实际上工作,我会试一试 – marriedjane875
如果它的工作,一个简单的upvote的答案将不胜感激。 :) – sbs
sheesh,你是对的。学习somethign新的日常:) – marriedjane875