首页 > 解决方案 > 替换dxl中两个模块之间的字符串

问题描述

我需要你的帮助,请知道我的想法是否可能是 dxl ,我有两个模块,编号在 [....] 之间,问题出在 Modul 1 中缺少一些 [数字]!

如何从模块 2 中获取 [number]?

例子:

模块 1:“发动机或电动机是一种旨在将一种形式的能量转换为机械能的机器。见 [无编号]”

模块 2:“发动机或电动机是一种旨在将一种形式的能量转换为机械能的机器。参见 [123]”

在我的示例中,括号之间缺少的数字是 123,我想在模块 1 中写下这个数字

此致,

标签: ibm-doors

解决方案


是的,这应该是可能的。

首先,您需要一些方法来识别相应的对象。例如,如果您有一些属性“manually_filled_requirement_id”,您将遍历模块 1,对于每个对象,获取 ID,在模块 2 中找到具有相同 ID 的对象。然后,问题是,您是否还想更新需求文本或只更新括号中的数字,并且在对象包含不同数字的情况下,确定哪个是正确的数字。如果您只想更新数字,则可以使用正则表达式。

如果要复制完整的文本,很简单:

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

否则,您必须将对象 1 和 2 的文本分成三个部分:

  1. 文本中直到并包括(第一个?最后一个?)[的部分
  2. (第一个?最后一个?)[]之间的部分
  3. (第一个?最后一个?)之后的部分]

然后你可以设置

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

您可以使用的正则表达式是:

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

即:在匹配 1 中收集从开头 (^) 到第一个 [ 的所有内容,在匹配 2 中收集所有不是 ] 的内容,在匹配 3 中收集直到结尾 ($) 的所有内容。第二个 Regexp 匹配 if part 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 方面更流利,所以可能是我混淆了一些语法,但你应该明白这一点。


推荐阅读