我收到以下文本文件。在Ruby中分割兩次文本文件
bob jones,19,moore reef,yes,no
jenny smith, 21,reef park,yes,yes
any body, 12,somewhere,no,no
我想每一行是在一個單獨的陣列或我想爲每一個數據片段(例如name_array,age_array,destination_array等)單獨的陣列。
我該怎麼做?
我收到以下文本文件。在Ruby中分割兩次文本文件
bob jones,19,moore reef,yes,no
jenny smith, 21,reef park,yes,yes
any body, 12,somewhere,no,no
我想每一行是在一個單獨的陣列或我想爲每一個數據片段(例如name_array,age_array,destination_array等)單獨的陣列。
我該怎麼做?
將文件拆分爲與readlines
相關的行,然後對於每行使用逗號分隔的String#split
。然後,如果你喜歡(用於你的「第二種方式」)轉置。
鑑於people.txt
bob jones,19,moore reef,yes,no
jenny smith, 21,reef park,yes,yes
any body, 12,somewhere,no,no
該文件,那麼該文件的行obatined這樣的:
people = IO.readlines("people.txt")
p people
這給
["bob jones,19,moore reef,yes,no\n",
"jenny smith, 21,reef park,yes,yes\n",
"any body, 12,somewhere,no,no"]
在這一點上,你有一些額外的在那裏有換行符,但是當你逐行處理時,它們會消失,加入String#chomp
:
result = []
people = IO.readlines("people.txt")
people.each {|line| result << line.chomp.split(",")}
p result
這給
[["bob jones", "19", "moore reef", "yes", "no"],
["jenny smith", " 21", "reef park", "yes", "yes"],
["any body", " 12", "somewhere", "no", "no"]]
你問題的第二部分是如何得到片每列。最簡單的方法是使用transpose
。像這樣:
result = []
people = IO.readlines("people.txt")
people.each {|line| result << line.chomp.split(",")}
p result.transpose
這給
[["bob jones", "jenny smith", "any body"],
["19", " 21", " 12"],
["moore reef", "reef park", "somewhere"],
["yes", "yes", "no"],
["no", "yes", "no"]]
UPDATE我不得不修改我的答案中添加要吃掉!此外,您可能還想添加一些字符串修剪。我會讓你看起來那個。從標準庫中的CSV分析器:-)
加載:
require 'csv'
a = CSV.open('x.csv').map { |r| r.map(&:strip) }
的會給你一個a
這樣的:
[
[ "bob jones", "19", "moore reef", "yes", "no" ],
[ "jenny smith", "21", "reef park", "yes", "yes" ],
[ "any body", "12", "somewhere", "no", "no" ]
]
然後你可以使用b = a.transpose
翻轉行並在b
列中獲得:
[
[ "bob jones", "jenny smith", "any body" ],
[ "19", "21", "12" ],
[ "moore reef", "reef park", "somewhere" ],
[ "yes", "yes", "no" ],
[ "no", "yes", "no" ]
]
然後從那裏你可以拉出來單獨的陣列,如果你希望他們:
names, ages, destinations, flags1, flags2 = *b
我不得不猜測flags1
和flags2
名。
我做到了這一點;
f1 = File.open(filename,"r")
f1.each do | line|
i += 1
data = line.split(',')
#store data into arrays
passenger_name[i] = data[0] #passenger's name
passenger_age[i] = data[1]
passenger_destination[i] = data[2]
passenger_meal[i] = data[3]
passenger_dive[i] = data[4]
end
它存儲每個姓名,年齡,目的地等不同陣列解決我的問題更好。感謝你的所有迴應。