我想阅读此文本文件:
Almanya,Berlin
Andorra,Andorra La Vella
Arnavutluk,Tiran
Avusturya,Viyana
Belarus,Minsk
并将其转换为如下数组:
country = ["Almanya","Berlin","Andorra","Andorra La Vella"...]
所以我想,我可以很容易地获取和阅读国家名称,代码可以返回大写名称。也许这个解决方案可能很糟糕,但我不知道。
我试过这样:
File.open('login.txt') do |f|
f.lines.each do |line|
userarr << line.split.map(&:to_s)
end
end
但结果是:
[["Almanya,Berlin"], ["Andorra,Andorra", "La", "Vella"],...]
我怎么能在红宝石中做到这一点?
答案 0 :(得分:2)
这个单行将做你想要的,返回一个扁平的阵列。您当然可以将其分解为多个方法调用以进行调试或读取,但它可以发布。
File.readlines('/tmp/corpus').map(&:chomp).flat_map { |line| line.split ?, }
答案 1 :(得分:0)
更改
userarr << line.split.map(&:to_s)
到
userarr << line.split(',')
您需要拆分逗号,而不是空格。
答案 2 :(得分:0)
只需将文件读入字符串并分成逗号和换行符:
File.read("my_file").split(/,|\n/)
#=> ["Almanya", "Berlin", "Andorra", Andorra La Vella", "Arnavutluk",
# "Tiran", "Avusturya", "Viyana", "Belarus", "Minsk"]
要消除任何前导或尾随空格,请点击.map(&:strip)
或将正则表达式更改为/\s*,\s*|\s*\n\s*/
。
如果文件很大,您可以一次读取一行:
File.foreach("my_file").flat_map { |s| s.split(/\s*,\s*|\s*\n\s*/) }
#=>["Almanya", "Berlin", "Andorra", "Andorra La Vella", "Arnavutluk",
# "Tiran", "Avusturya", "Viyana", "Belarus", "Minsk"]