2013-03-05 149 views
0

如何可以解析爲以下格式CSV文件較大:解析CSV文件

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

我需要保存A和所有的1的。我想保存1的逗號分隔:數據

A1,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 

我期待什麼:

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

+0

你嘗試過什麼?示例數據應該在您的過濾器後看起來像什麼? – sunnyrjuneja 2013-03-05 19:36:05

回答

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]; 
+0

添加樣本數據。 – Yogzzz 2013-03-05 18:19:54

+0

@Yogzzz:回答編輯。它適用於您的示例數據。我希望它有幫助。 – 2013-03-05 18:38:45

+0

@Yogzzz:我已經爲示例數據添加了'keyElement'和'arrayElement'的值。 – 2013-03-05 18:43:02