Заменить строки между двумя модулями в dxl - PullRequest
0 голосов
/ 24 мая 2018

Мне нужна ваша помощь, пожалуйста, чтобы узнать, возможна ли моя идея с dxl, у меня есть два модуля с номером между [....], проблема в модуле 1, некоторые [числа] отсутствуют!

как я могу получить [номер] из модуля 2?

Пример:

Модуль 1: «Двигатель или двигатель - это машина, предназначенная для преобразования одной формы энергии в механическую энергию. См. [Нет номера]»

Модуль 2: «Двигатель или двигатель - это машина, предназначенная для преобразования одной формы энергии в механическую энергию. См. [123]»

В моем примере пропущенное число в скобках равно 123, я хочу написатьэтот номер в Модуле 1

с наилучшими пожеланиями,

1 Ответ

0 голосов
/ 24 мая 2018

Да, это должно быть возможно.

Во-первых, вам нужен какой-то метод для идентификации соответствующих объектов.если у вас есть, например, какой-либо атрибут «manual_filled_requirement_id», вы пройдете через Модуль 1, для каждого объекта, получите идентификатор, найдите объект в модуле 2 с тем же идентификатором.Тогда возникает вопрос: хотите ли вы обновить текст требования или только число в скобках, и в случае, если объекты содержат разные числа, решите, какой из них является правильным.В случае, если вы хотите обновить только номер, вы можете использовать регулярные выражения.

Если вы хотите скопировать полный текст, это просто:

object1."Object Text" = object2."Object Text"

В противном случае вам придется разделитьтекст объекта 1 и 2 на три части:

  1. часть до и включая (первый? последний?) [в тексте
  2. часть между (первая?last?) []
  3. часть после (первая? last?)]

Затем вы можете установить

object1."Object Text" = part_1_of_object_1 part_2_of_object_2 part 3_of_object_1

регулярные выражения, которые вы можете использовать для этогоis:

Regexp hasAPlaceForNumber = regexp2 "(^[^\[]+\[)([^\]]*)(\].*$)"
Regexp hasNumber = regexp2 "(^[^\[]+\[)([\d]+)(\].*$)"

То есть: собрать все от начала (^) до первого [в матче 1, все, что не является] в матче 2, все до конца ($) в матче 3. Второе регулярное выражение совпадает, если часть 2 состоит только из цифр.

Тогда вы можете сделать что-то вроде

string o1Text = object1."Object Text"""
string o2Text = object2."Object Text""
if ((hasNumber o2Text) and (not hasNumber o1Text) and hasAPlaceForNumber o1Text)
   hasNumber o2Text
   string part_1_of_object_2 = o2Text [match 1]
   string part_2_of_object_2 = o2Text [match 2]
   string part_3_of_object_2 = o2Text [match 3]
   hasAPlaceForNumber o1Text
   string part_1_of_object_1 = o1Text [match 1]
   string part_2_of_object_1 = o1Text [match 2]
   string part_3_of_object_1 = o1Text [match 3]
   object1."Object Text" = part_1_of_object_1 part_2_of_object_1 part_3_of_object_1
else if (...)

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

...