次のテキストファイルがあります。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、等)のための別個のアレイを希望します。
どうすればいいですか?
次のテキストファイルがあります。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、等)のための別個のアレイを希望します。
どうすればいいですか?
ファイルを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パーサと
ロード、それを:
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
各名前、年齢、目的地などを別の配列に格納することで、私の問題をよりよく解決します。すべてのあなたのrepsonsesありがとう。