2011-08-24 45 views
6

YAML dosyasındaki verileri okumak istiyorum ancak korunacak öğelerin sırasına ihtiyacım var.
Bu işleve sahip perl'de bir modül var mı ve nasıl yapmalı? Buna karşılıkYAML siparişini koru perl



kenichi İstediğimi yapmayı başardı @mugen için ama bu makul bir çözüm olduğuna inanmıyoruz.

eski YAML:

foo: 
    bar: some value 
    baz: other value 
qwe: 
    bar: yet another value 
    baz: again 

yeni YAML

- 
    foo: 
     bar: some value 
     baz: other value 
- 
    qwe: 
     bar: yet another value 
     baz: again 
+4

Sipariş söz konusu olduğunda yaml dizinlerini kullanmalısınız. Yaml veri yapınızı yeniden düşünün. –

+0

@mugen kenichi Soruyu daha önce bildirdim – bliof

+1

Evet, aslında burada açıklanan bir haritalama http://www.yaml.org/spec/1.2/spec.html#id2765410 –

cevap

6

ve "o "haritalama tuşları sipariş yok" diye YAML spec specifically states düğüm sırası, bir dizi önemli her durumda kullanılmalıdır ". Bir haritalamadan sıralama yapmak, spesifikasyonları ihlal ediyor olabilir. Mugen tarafından belirtildiği gibi, düzenli eşlemelerin kullanılması, siparişi korumak için doğru çözümdür. Eğer gerçekten isteseydi

, bir şekilde düzeni korumak olacak bir Tie::IxHash içine atmak için YAML ayrıştırıcı alabilir ... ama sana kontrolün bu seviyede verir hayır Perl YAML ayrıştırıcı biliyoruz. YAML::Old::Loader ile bir şeyler yapabilirsiniz, ancak bu çok iyi bir YAML çözümleyicisi ve YAML :: Eski :: Yükleyici belgelenmemiş olabilir.

Üçüncü seçenek, ayrıştırıcıya özel bir tür olarak eşleştirmeyi yüklemesi için yönlendiriciye YAML tags (aka türlerini) kullanmak olacaktır ve sonra geri bildirimi sağlamanız gerekir ... ancak daha sonra YAML ayrıştırıcısının geri bildirimi sağlaması muhtemeldir sırasız bir karma ile.

YAML'yi değiştirmenizi öneririm. Taşınabilir bir veri dilinin noktası, tüm semantik anlamın, veri dosyasında veya belirli bir ayrıştırıcıda örtük olmayan özelliklerde açık olmasıdır. Sipariş edilen eşlemeler kabul edilmiş, kompakt bir YAML deyimidir.

- foo: 
     bar: some value 
     baz: other value 
- qwe: 
     bar: yet another value 
     baz: again