LINUX.ORG.RU

Perl YAML


0

1

Подскажите перл модуль для работы с yml файлами.

сам yml файл примерно такого вида:

regions:
  qwerasdf:
    min: {z: 251.0, y: 63.0, x: 1.0}
    flags: {}
    max: {z: 259.0, y: 63.0, x: 15.0}
    priority: 0
    type: cuboid
    owners:
      players: [test1]
    members:
      players: [test2, test3]
  test:
    min: {z: 120.0, y: 66.0, x: -15.0}
    flags: {}
    max: {z: 258.0, y: 82.0, x: 211.0}
    priority: 0
    type: cuboid
    owners:
      players: [test3]
    members: {}
нужно что бы была возможность читать писать в файл, добавлять параметры... не нарушая его структуры.

★★★★★

Последнее исправление: TDrive (всего исправлений: 1)

Ответ на: комментарий от hippi90

пробовал YAML::Tiny и YAML::Syck но как то у меня не сложились с ними отношения. в google yandex 95% ссылок на инфу про установку этих модулей...
с yaml раньше не работал.

вы мне просто посоветуйте модуль который 100% подойдёт под мои задачи, а дальше я разберусь.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Не знаю, как в ваших дистрибутивах, в моей федоре можно поставить из репозитория:

 
$ yum search perl yaml
...
perl-YAML.noarch : YAML Ain't Markup Language (tm)
perl-YAML-LibYAML.i686 : Perl YAML Serialization using XS and libyaml
perl-YAML-Parser-Syck.i686 : Perl Wrapper for the YAML Parser Extension: libsyck
perl-YAML-Syck.i686 : Fast, lightweight YAML loader and dumper
perl-YAML-Tiny.noarch : Read/Write YAML files with as little code as possible
...

Документация по YAML::Tiny - http://search.cpan.org/~adamk/YAML-Tiny-1.50/lib/YAML/Tiny.pm

hippi90 ★★★★★
()
Ответ на: комментарий от TDrive

Не знаю как в Perl, но в Python YAML модуль представляет документ в виде ассоциативного массива и/или списков, править его легко при этом.

buddhist ★★★★★
()

perldoc YAML::Tiny

           # In your file

           ---
           rootproperty: blah
           section:
             one: two
             three: four
             Foo: Bar
             empty: ~

           use YAML::Tiny;

           # Create a YAML file
           my $yaml = YAML::Tiny->new;

           # Open the config
           $yaml = YAML::Tiny->read( 'file.yml' );

           # Reading properties
           my $root = $yaml->[0]->{rootproperty};
           my $one  = $yaml->[0]->{section}->{one};
           my $Foo  = $yaml->[0]->{section}->{Foo};

           # Changing data
           $yaml->[0]->{newsection} = { this => 'that' }; # Add a section
           $yaml->[0]->{section}->{Foo} = 'Not Bar!';     # Change a value
           delete $yaml->[0]->{section};                  # Delete a value

           # Add an entire document
           $yaml->[1] = [ 'foo', 'bar', 'baz' ];

           # Save the file
           $yaml->write( 'file.conf' );

Ну и что тут непонятного? Что значит «не сложились отношения»?

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

не сложились отношения это:

use YAML::Tiny;
use Data::Dumper;
use strict;

my $yaml = YAML::Tiny->read( 'regions.yml' );

print Dumper($yaml);
вывод: $VAR1 = undef;
use YAML::Tiny;
use Data::Dumper;
use strict;

my $yaml = YAML::Tiny->read( 'regions.yml' )->[0];

print Dumper($yaml);
вывод: Can't use an undefined value as an ARRAY reference at test.pl line 5.

Нашел модуль YAML::XS, работает как часы. вопрос решен.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Здесь что-то не так. Права на чтение regions.yml есть? Можете воспроизвести с каким-нибудь тестовым файлом и выложить его? Я бы у себя проверил.

Я понимаю, что задачу вы уже решили, но если что-то не работает, то неплохо было бы дефект зарепортить.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

исправил, без изменений.
вот regions.yml
http://rghost.ru/35801024

для сравнения

#!/usr/bin/perl
use YAML::XS;
use Data::Dumper;
use strict;

my $test = YAML::XS::LoadFile('regions.yml');
print Dumper($test);

выводит:

$VAR1 = {
          'regions' => {
                         '546546' => {
                                       'members' => {},
                                       'priority' => 0,
                                       'owners' => {
                                                     'players' => [
                                                                    'test123'
                                                                  ]
                                                   },
                                       'flags' => {},
                                       'min' => {
                                                  'y' => '62.0',
                                                  'x' => '90.0',
                                                  'z' => '380.0'
                                                },
                                       'max' => {
                                                  'y' => '77.0',
                                                  'x' => '147.0',
                                                  'z' => '411.0'
                                                },
                                       'type' => 'cuboid'
                                     },
                         'www' => {
                                    'members' => {},
                                    'priority' => 0,
                                    'owners' => {
                                                  'players' => [
                                                                 'mecha'
                                                               ]
                                                },
                                    'flags' => {},
                                    'min' => {
                                               'y' => '110.0',
                                               'x' => '192.0',
                                               'z' => '423.0'
                                             },
                                    'max' => {
                                               'y' => '127.0',
                                               'x' => '198.0',
                                               'z' => '433.0'
                                             },
                                    'type' => 'cuboid'
                                  },
...

TDrive ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.