新行列表到数组中

时间:2011-11-29 11:27:48

标签: ruby arrays list

我有一个包含新行的列表,我喜欢将其转换为数组,例如

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

7 个答案:

答案 0 :(得分:21)

这适用于1.9 ..不确定是否为空?虽然

可用1.8
%(
JAN 

FEB 

MAR

APR

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

答案 1 :(得分:7)

如果你的意思是这种清单

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

然后你可以把它转换成像这样的数组

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

<强>更新 第二次尝试:

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

答案 2 :(得分:3)

我发现michalfs单行解决方案非常有用,但我想要注意一个微妙的细节(这可能只对像我这样的ruby-newbies有趣)

如果MAY的 Y 是文本文件中的最后一个字符,则生成的数组将如下所示:

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

为什么这样?引自String#chop ruby doc

  

chop→new_str 返回删除了最后一个字符的新String。 [...]    String#chomp 通常是一种更安全的选择,因为如果字符串不以记录分隔符结尾,它将保持字符串不变。

因此chomp在这种特殊情况下似乎更准确:

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

(是的,我只是将&#39; m&#39; 添加到michalfs解决方案中。)

答案 3 :(得分:3)

我意识到这个问题已有几年了,但我无法用其他答案创建一个数组。我能够通过使用以下代码来解决它。 (我的列表以\ 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

答案 4 :(得分:0)

尝试获取另一个数组并将其中的行推入到&#34; \ n&#34; 像这样

 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

答案 5 :(得分:0)

返回行数组的单行,忽略任何空行:

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

答案 6 :(得分: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