2011-09-12 1 views
0

次のテキストファイルがあります。Rubyでテキストファイルを2回に分割する

bob jones,19,moore reef,yes,no 
jenny smith, 21,reef park,yes,yes 
any body, 12,somewhere,no,no 

Iは、別の配列となるように各行を希望OR Iは、データの各部分(例えばname_array、age_array、destination_array、等)のための別個のアレイを希望します。

どうすればいいですか?

答えて

1

ファイルをreadlinesの行に分割し、各行に対してコンマを使用してString#splitを使用します。その後、あなたが好きなら(あなたの "第二の道"のために)移調する。あなたには、いくつかの余分を持っている。この時点で

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"] 

は次に、ファイルの行は次のようにobatinedさ

bob jones,19,moore reef,yes,no 
jenny smith, 21,reef park,yes,yes 
any body, 12,somewhere,no,no 

people.txtファイルを考えますそこには改行がありますが、行ごとに処理すると消えて、String#chomp

result = [] 
people = IO.readlines("people.txt") 
people.each {|line| result << line.chomp.split(",")} 
p result 

これは、あなたの質問の2番目の部分はスライス列ごとを取得する方法である

[["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を与える私はchompしに追加するには、私の答えを編集していました!また、実際には、文字列トリミングを追加することもできます。私はあなたにそれを見せさせるでしょう。 :-)標準ライブラリから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 

各名前、年齢、目的地などを別の配列に格納することで、私の問題をよりよく解決します。すべてのあなたのrepsonsesありがとう。

関連する問題