Добавить / изменить текст в скобках - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь создать секретный текст, и у меня возникают проблемы при повороте

(class1 (subclass1) (subclass2 item1 item2))

в

(class1 (subclass1 item1) (subclass2 item1 item2))

.без кеширования subclass1 в памяти.Я использую Perl в Linux, поэтому любое решение, использующее сценарий оболочки или Perl, приветствуется.

Редактировать: Я пробовал использовать grep, сохраняя целые subclass1 в переменной, затемизменить и экспортировать его в список;но список может увеличиться, и таким образом потребуется много памяти.

1 Ответ

2 голосов
/ 07 марта 2019

Понятия не имею, чтобы превратить текст выше в один ниже

Общий подход:

  1. Разобратьtext.

    Похоже, у вас есть списки разделенных пробелами списков и атомов.Если это так, результат может выглядеть следующим образом:

    {
       type => 'list',
       value => [
          {
             type => 'atom',
             value => 'class1',
          },
          {
             type => 'list',
             value => [
                {
                   type => 'atom',
                   value => 'subclass1',
                },
             ]
          },
          {
             type => 'list',
             value => [
                {
                   type => 'atom',
                   value => 'subclass2',
                },
                {
                   type => 'atom',
                   value => 'item1',
                },
                {
                   type => 'atom',
                   value => 'item2',
                },
             ],
          }
       ],
    }
    

    Возможно, что-то гораздо более простое может быть сгенерировано, но вы были легки в деталях о формате.

  2. Извлеките необходимую информацию из дерева.

    Вы немного ознакомились с подробностями о формате данных, но это может быть так просто, как показано ниже, если структура данных вышебыл создан синтаксическим анализатором:

    my $item = $tree->{value}[2]{value}[1]{value};
    
  3. Выполните требуемые изменения.

    Вы получили подробную информацию о формате данных, но это может быть так же просто, какЕсли указанная выше структура данных была создана синтаксическим анализатором:

    my $new_atom = { type => 'atom', value => $item };
    push @{ $tree->{value}[1]{value} }, $new_atom;
    
  4. Сериализация структуры данных.

    Для приведенной выше структуры данных вы можете использовать следующее:

    sub serialize {
       my ($node) = @_;
       return $node->{type} eq 'list'
          ? "(".join(" ", map { serialize($_) } @{ $node->{value} }).")"
          : $node->{value};
    }
    

В зависимости от особенностей могут быть доступны другие подходы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...