[英]Ruby Read File And Convert It To An Array
我想閱讀這個文本文件:
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"],...]
我怎樣才能簡單地在紅寶石中做到這一點?
這種單線將執行您想要的操作,並返回一個展平的數組。 您當然可以將其分為多個方法調用以進行調試或提高可讀性,但是它可以按發布方式工作。
File.readlines('/tmp/corpus').map(&:chomp).flat_map { |line| line.split ?, }
更改
userarr << line.split.map(&:to_s)
至
userarr << line.split(',')
您需要用逗號而不是空格分開。
只需將文件讀取為字符串,然后以逗號和換行符分隔即可:
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"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.