0

次の形式の大きな csv ファイルを解析するにはどうすればよいですか。

A,1,X:1,X:1,X:1,X:1...

Aとすべてを保存する必要があります11をカンマ区切りで保存したい:

A 1,1,1,1,1,1...

データの例:

4217,23,4217:0.1304,11045842:0.0870,11027563:0.0435,15055960:0.0435,12556773:0.0435,10317812:0.0435,21268053:0.0435,14982717:0.0435,12560416:0.0435,21684075:0.0435,12177392:0.0435,878710:0.0435,21777845:0.0435,11045966:0.0435,17109375:0.0435,15701596:0.0435,10312162:0.0435,11045878:0.0435

私が期待するもの:

4217 4217,11045842,11027563,15055960,12556773,10317812,21268053,14982717,12560416,21684075,12177392,878710,21777845,11045966,17109375,15701596,10312162,11045878

4

1 に答える 1

2

入力が変数の文字列としてあるとします。たとえばrow

#Filename: test.rb

row = "4217,23,4217:0.1304,11045842:0.0870,11027563:0.0435,15055960:0.0435,12556773:0.0435,10317812:0.0435,21268053:0.0435,14982717:0.0435,12560416:0.0435,21684075:0.0435,12177392:0.0435,878710:0.0435,21777845:0.0435,11045966:0.0435,17109375:0.0435,15701596:0.0435,10312162:0.0435,11045878:0.0435";

row=row.split(',').map do |x|
        if(x.index(':')!=nil)
            x[0..(x.index(':')-1)]
        else
            x
        end
    end

keyElement = row[0];
arrayElement = row[2..-1];

puts keyElement;
for i in 0..arrayElement.length-1
    print(arrayElement[i] + ", ");
end
puts arrayElement[-1];

ここkeyElementには「A」arrayElementが含まれ、コンマ区切りの値が配列として含まれます。

サンプルデータの場合、次のようになります。

>>ruby test.rb
4217
4217, 11045842, 11027563, 15055960, 12556773, 10317812, 21268053, 14982717, 12560416, 21684075, 12177392, 878710, 21777845, 11045966, 17109375, 15701596, 10312162, 11045878, 11045878

ただし、配列を値「A」に関連付ける必要があると仮定すると、ハッシュをお勧めします。

#row is mapped as before

hashElement = Hash.new();
hashElement[row[0]] = row[2..-1];
于 2013-03-05T18:00:43.067 に答える