2016-09-21 45 views
0

我正在讀取文件的內容到數組中。一行中的最後一項將帶有行尾的字符與它結合,這是我不想要的。下面是我在做什麼:如何在讀取文件時切斷行尾?

@arr = [] 
File.open('somefile.txt', 'r') do |file| 
    while (line = file.gets) 
     puts "'#{line.split('|')[2]}'" 
     @arr << line 
    end 
end 

文件中的數據是這樣的:

col1|col2|col3 
col1|col2|col3 
col1|col2|col3 

col3,它包括換行符結束。我可以從上面的puts,其輸出告訴本:

'col3
'

我試過file.gets.chomp但引發以下錯誤:

undefined method `chomp' for nil:NilClass (NoMethodError)

如何刪除行的末尾字符?

+0

嘗試: 如果(line.size> 0){ 看跌期權「 '#{line.split(' | ')[2]}'「 @arr << line } – Kamae

+0

我建議你寫'@arr = []; File.foreach('animals.txt'){| line | @arr << line.chomp}; @arr#=> [「col1 | col2 | col3」,「col1 | col2 | col3」,「col1 | col2 | col3」]'。 –

回答

2

您的代碼失敗,因爲當文件被完全讀取時,file.gets返回nil,並調用.chomp就會拋出您提到的錯誤。

你可以,但是,請撥打.chomp()while塊,它在哪兒保證linenil內。

例如,而不是

puts "'#{line.split('|')[2]}'" 

你可以做

puts "'#{line.chomp.split('|')[2]}'"