我已经为模块A中的每个需求确定了3-5个关键字。每个关键字用逗号分隔。现在我想搜索模块B中的每个需求,看看它们中哪些有与每个关键字匹配的单词。
发布于 2020-05-27 09:30:54
不确定你到底在找什么。您可能需要指定我将要提出的这些解决方案是否都不是您想要的。
如果您正在尝试创建一个在当前视图中仅显示具有这些关键字的对象的筛选器,您可以通过首先转到筛选器(工具>筛选器>定义),然后选择出现的筛选器菜单左下角的高级按钮来创建高级筛选器。
此时,您可以为过滤器创建自定义规则。我只需要为每个单词创建一个单独的规则,定义如下:
Attribute: Object Text
Condition: contains
Value: <insert word here>
Match Case: uncheck
Regular Expression: uncheck然后选择Add按钮将规则添加到Advanced Options中的可用规则列表中。
此时,您可以在可用规则列表中选择多个规则,并且可以与/或这些规则一起为您想要的视图创建自定义筛选器。
因此,如果您正在尝试创建一个仅包含特定单词的对象的自定义视图,那么这就是适用的。
如果您正在讨论如何编写DXL代码以自动生成包含特定单词的需求。您可以使用如下所示的内容:
Object o
String s
int offset, len
for o in entire (current Module) do
{
if (isDeleted(o)) continue
s = o."Object Text"""
if findPlainText(s, "<insert word here>", offset, len, false)
{
print identifier(o) // or replace this line with however you want to display object
}
}希望这能对你有所帮助。干杯!
编辑:
要对逗号分隔的列表执行操作,一次一个,您可以使用带有某种搜索功能的while循环,一次删除一个单词。
void processWord (string someWord, Module mTarget, Object oSource)
{
Object oTarget
string objID = identifier(oSource)
for oTarget in mTarget do
{
if (<someWord in oTarget Object Text>) // edit function as necessary to do this
{
if (oTarget."Exists""" == "")
oTarget."Exists" = objID
else
oTarget."Exists" = oTarget."Exists" "," objID
}
}
}
int offset, len
string searchCriteria
Module mSource = read("<path of source module>", true)
Module mTarget = edit("<path of target module>", true)
Object oSource
for oSource in mSource do // can use "for object in entire(m)" for all objects
{
if (oSource != rqmt) continue // create conditions specific to your module here
searchCriteria = oSource."Search Criteria"""
while (findPlainText(searchCriteria, ",", offset, len, false))
{
processWord(searchCriteria[0:offset-1], mTarget, oSource)
searchCriteria = searchCriteria[offset+1:]
}
}
processWord(searchCriteria, mTarget, oSource) // for last value in comma separated listhttps://stackoverflow.com/questions/61647332
复制相似问题