2010-10-20 21 views
5

Yakut dosyalara ruby'den veri yazıyorum ve sık sık dosya hakkında noktalı diğer adlar alıyorum. Şeyler gibi: Benim durumumdaRuby YAML Takma ad olmadan yazma

- &id001 
    somekey: somevalue 
- *id001 

Ben yardım okunabilirliği için yaml dosyalarını kullanarak ve mevcut veri yok anahtarlarla sadece | ayrılmış değerler olduğu gibi dosyalarda değerlere ad eklemek duyuyorum. Yaml dosyalarının takma adlarla yazılmasını nasıl engelleyebilirim? Daha fazla açıklama için

[Düzenleme]

burada veri ve sorun tip bir örnektir.

orijinal veri benziyor:

Ham|2.00|1 
Eggs|0.50|12 
Milk|2.00|2 

Ve ayrıca uygun isimleri almak için bir sql dosyası bakar ki, yaml dönüştürmek için bir yakut senaryo yazdım. diğer adlar hiçbir yerde birbirine yakın olabileceğinden

--- 
- !omap 
    - name: Ham 
    - &id001 
    price: 2.00 
    - quantity: 1 
- !omap 
    - name: Eggs 
    - price: 0.50 
    - quantity: 12 
- !omap 
    - name: Milk 
    - *id001 
    - quantity: 1 

Bu büyük veri kümeleri bir soruna neden ve zor okumak için yapar: gibi yaml dosya görünüyor.

+1

bu YAML için tefrika olur sınıfını gönderebilir miyim: Bu soru üzerine

require 'json' jsonObj = oldYaml.to_json newYaml = YAML.load(jsonObj) print newYaml.to_yaml 

aynı cevabı? –

+0

Bu serileştirilmiş bir sınıf değil, YAML :: Omap'ın bir dizisidir. Umarım örnek daha açık hale getirir. –

cevap

2

Neden YAML :: Omap'in kullanıyorsunuz? Çok daha basit ve daha temiz bir çözüm olacaktır

ilk gibi karma bir diziye veri okumak için: o

a = [ {'name' => 'Ham', 'price' => 2.00, 'quantity' => 1}, 
     {'name' => 'Eggs', 'price' => 0.50, 'quantity' => 12}, 
     {'name' => 'Milk', 'price' => 2.00, 'quantity' => 2} ] 

ve sadece bunu:

a.to_yaml 

elde edilir:

--- 
- price: 2.0 
    name: Ham 
    quantity: 1 
- price: 0.5 
    name: Eggs 
    quantity: 12 
- price: 2.0 
    name: Milk 
    quantity: 2 

Bu sizin için çalışır mı?

+0

Bir noktada yaml dosyaları, boruyla ayrılmış dosyalara geri yazılır. Bu sırayla önemlidir ve normal bir karma kullanıldığında öğelerin sırasının karıştırılabileceğini buldum. –

+0

Bunu Ruby 1.8 kullanıyorsun, o zaman? Haklısınız, Ruby 1.8'de karma sipariş yok, bu yüzden öğelerin sırası değiştirilebilir. YAML dosyasındaki öğelerin sırası mı, yoksa yalnızca bir tanesi ayrılmış mı? Öyleyse, YAML'den boruyla ayrılmış dosyaya dönüştürürken öğeleri yeniden sıralamayı düşünebilirsiniz. –

+0

Bunu yapabilirdim ama sorunumu çözebilir miydi? Omap’ları kullanmamın, takma adların eklenmesine neden olduğunu düşünüyor musunuz? –

1

Bu, aynı belgede aynı nesneyi birden çok kez çıktılandığınız için olur. Takma adlar istemiyorsanız, dup nesnelere ihtiyacınız vardır. Aşağıdaki karşılaştırın:

require 'yaml' 

hash = {'a' => 1} 

puts [hash, hash].to_yaml 
puts 
puts [hash, hash.dup].to_yaml 

Çıktı: O YAML çok büyük ve yapıları iç içe geçmiş zaman takma ad genişletmek için her nesneyi dup için karmaşık olabilir

--- 
- &1 
    a: 1 
- *1 

--- 
- a: 1 
- a: 1 
İlgili konular