【问题标题】:Get module data without using the read function不使用读取功能获取模块数据
【发布时间】:2013-05-29 18:43:41
【问题描述】:

我正在尝试获取多个对象的 inlinks 和 outlinks 中的属性,我的目标是通过将读取的模块存储在跳过列表中并在阅读之前检查跳过列表来不再重新读取相同的模块下一次模块。

所以我的问题是,如果之前已经打开过,我如何获取存储在跳过列表中的模块名称的数据? 如果该模块之前打开过,那么 m2 = module item str2 行是否足以替换读取功能?

下面是我尝试获取对象的链接属性:

Skip sInlink = create()

void get_object_inlinks (Object obj)
{
   string str, str2
   LinkRef lk = null
   Object o = null

   for lk in all (obj <- "*") do
   {
     ModName_ mn = source(lk)
     str = fullName(mn)
     if (!find(sInlink, str, str2))
     {
        m2 = read(str, false)
        put(sInlink, str, str)
     }
     else
        m2 = module item str2

     if (m2 != null)
     {
        o = gotoObject(sourceAbsNo(lk), m2)
        // get object o attributes
        ...
     }
   }
}

【问题讨论】:

    标签: ibm-doors ibm-rational


    【解决方案1】:

    您是否有不想重新阅读该模块的原因?一旦模块打开,再次读取它并不会重新打开模块,除非您每次都关闭它。

    但是,另一种方法是将模块句柄存储在跳过列表中而不是模块名称中。

    put(sInlink, str, m2)
    

    然后代替:

    if(!find(sInlink, str, str2))
    

    使用:

    if(!find(sInlink, str, m2))
    

    如果找到str,它将把模块句柄放在m2,如果没有,您可以继续阅读。

    如果你还没有这个,你应该遍历跳过列表并关闭代码末尾的所有模块。

    for m2 in sInlink do
    {
      if(!null m2) close m2
    }
    

    祝你好运!

    【讨论】:

    • 谢谢!我现在按照您的建议存储模块句柄。我不想重新阅读模块的原因是因为内存问题。我的脚本将处理 300 多个模块,每个模块都有数百个链接。我需要打开链接的模块来读取一些属性并将其与父模块进行比较。
    • 如果此答案有帮助,请接受它作为您问题的答案,让其他人知道。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多