2015-09-27 47 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