2011-09-12 30 views
0

我收到以下文本文件。在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等)單獨的陣列。

我該怎麼做?

回答

1

將文件拆分爲與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分析器:-)

5

加載:

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 

我不得不猜測flags1flags2名。

0

我做到了這一點;

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 

它存儲每個姓名,年齡,目的地等不同陣列解決我的問題更好。感謝你的所有迴應。