2015-09-27 50 views
4

我试图摆脱括号[]和新行\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\"] 

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

回答

3

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

当你使用:

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

sheesh,你是对的。学习somethign新的日常:) – marriedjane875

5

puts在输出结尾添加换行符。打印不。 使用打印。它可能会解决你的问题。另外,使用.strip。

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

noap:\是行不通的 – marriedjane875

+0

添加打印name.strip也没有工作 – marriedjane875

+0

您可以发布您的代码? – Khoga

1

如果:

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

它只是:

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

我恰好使用'&:strip'吗?因为我在地图上定义了未定义的方法条,因为...' – marriedjane875

+0

对不起,我没有关注。你会得到一个异常运行这个?我相信代码很好。顺便提一句,map(&:strip)与map {| s |的结果相同s.strip}'。 –

+0

我不确定'&:strip'是否是一个排字错误 – marriedjane875

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

这可能实际上工作,我会试一试 – marriedjane875

+0

如果它的工作,一个简单的upvote的答案将不胜感激。 :) – sbs