2011-11-29 37 views
9

我有一個包含新行的列表,我希望將它轉換爲數組,例如,將新行列入陣列

JAN 

FEB 

MAR 

APR 

MAY 

["JAN", "FEB", "MAR", "APR", "MAY]

任何幫助將不勝感激。 感謝

像這樣的事情似乎並沒有工作(text_file.txt包含如上個月的列表)

file = File.new("text_file.txt", "r") 
while (line = file.gets) 
    line.chomp 
    list = line.split(/\n/) 
    puts "#{list}" 
end 
+0

是列表的文本文件或東西嗎?如果是這樣,你可以讀取文件的每一行,去掉它並將其保留在數組中。 –

+0

請不要爲您遇到問題的算法的每一行提出新​​問題。您可以[編輯]添加更多信息,如果您沒有得到足夠好的答案(根據[常見問題#獎勵]),在需要等待之後,您可以爲此問題添加賞金。 – Will

+0

你從未選擇過答案。沒有幫助嗎? –

回答

7

如果你的意思是這樣的名單

text = "JAN\nFEB\nMAR\nAPR\nMAY" 

那麼你可以將其轉換爲像這樣的陣列

text.split(/\n/) => ["JAN", "FEB", "MAR", "APR", "MAY"] 

UPDAT E: 第二個嘗試:

text = [] 
File.read("text_file.txt").each_line do |line| 
    text << line.chop 
end 
puts text => ["JAN", "FEB", "MAR", "APR", "MAY"] 
+0

不,這似乎也沒有工作。我回來了同樣的名單。 – Mark

+0

'text'變量包含結果,如果要將結果存儲到文件,則應將結果寫入文件。 – megas

+0

是的,謝謝,它現在有效。 – Mark

19

這適用於1.9 ..不知道,如果是空的?在1.8,雖然

%(
JAN 

FEB 

MAR 

APR 

MAY 
).split(/\n/).reject(&:empty?) 
+0

+1我測試了它,沒有任何麻煩地工作1.8.7; 1.9.3; 2.0.0 –

+0

我建議對正則表達式進行小改動以處理「空行」:'/ \ n \ n * /'。 –

+0

您也可以使用'/ \ n + /' –

0

則可以嘗試讓另一個陣列和推線成帶出「\ n」個 這樣

def read 
     a=[] 
     i=0 
      File.open('text_file.txt', 'r') do |f1| 
       while line = f1.gets 
        line.chomp 
        ppp= line.split(/\n/) 
        a[i] =ppp[0] 
        i=i+1 
       end 
       puts "#{a}" 
      end 
     end 
0

的一行返回線的排列,忽略任何空行:

File.readlines("text_file.txt").map{ |l| l.chop }.reject{ |l| l == '' } 
3

我發現michalfs一個在線的解決方案非常有幫助的,但我想指出一個微妙的細部(這將普羅巴bly只對像我這樣的紅寶石新手感興趣)

在有可能的Ÿ是在文本文件的最後一個字符,所產生的陣列將是這樣的:

["JAN", "FEB", "MAR", "APR", "MA"] 

爲什麼會這樣?從String#chop ruby doc報價:

斬→new_str返回刪除的最後一個字符一個新的字符串。 [...] 字符串#chomp通常是更安全的替代方案,因爲如果不以記錄分隔符結尾,則字符串將保持不變。

因此chomp似乎是在這種特殊情況下更準確的:

File.readlines("text_file.txt").map{ |l| l.chomp }.reject{ |l| l == '' } 

(是的,我只加了'M'到michalfs溶液。)

2

我認識到這一問題已經有幾年了,但我無法用其他答案創建一個數組。我能夠通過使用下面的代碼來弄清楚它。 (我的列表以\ r分隔,而不是\ n。)

text = [] 

input = File.read("x_values.txt") 
    text = input.split("\r") 
puts text.to_s 

如果你想拆就\ n代替:

text = [] 
input = File.read("x_values.txt") 
    text = input.split("\n") 
puts text.to_s 
0

剛一說明。這樣一來,你也可以安排一個轉換數組:

text = "JAN,FEB,MAR,APR,MAY" 

res = text.split(",") 

res.each { |x| puts x } 
puts res.kind_of?(Array) 

響應:

JAN 
FEB 
MAR 
APR 
MAY 
true