在整个模块中查找单词

时间:2018-02-16 07:23:55

标签: ibm-doors

我跳过列表包含ADC,FIFO,DAC,FILO等。 我想知道这些单词是否在整个模块中使用。如果在模块中使用,则应返回未使用的单词。 我有一个程序但执行时间太长。 请帮帮我。

以下是代码:

Skip Search_In_Entire_Module(Skip List)    
{   
    int sKey = 0    
    Skip sList      = create()    
    string data = ""
    string  objText1
    Object obj 

    for data in List do 
    {
        int var_count = 0
        for obj in m do 
        {
            objText1 = obj."Object Text"
            if objText1!=null then 
            {
                if (isDeleted obj){continue}
                if (table obj)    {continue}
                if (row obj)      {continue}
                if (cell obj)     {continue}        

                Buffer buf = create()
                buf    =   objText1
                int index = 0
                while(true)
                {
                    index = contains(buf, data, index)
                    if(0 <= index)
                    {
                        index += length(data)
                    }
                    else 
                    {
                        var_count++
                        break 
                    }
                }
                delete(buf)
            }
        }
        if (var_count ==0)
        {
            put(sList,sKey,data)
            sKey++
        }
    }
    return sList
}    

Unused_Terminolody_Data = Search_In_Entire_Module(Terminology_Data)

2 个答案:

答案 0 :(得分:0)

只是想知道:为什么这是一个while循环?

            while(true)
            {
                index = contains(buf, data, index)
                if(0 <= index)
                {
                    index += length(data)
                }
                else 
                {
                    var_count++
                    break 
                }
            }

我只想做:

index = contains ( buf, data )
if ( index == -1 ) {
     var_count++
}
buf = ""

我也不会继续删除并重新创建缓冲区。在创建对象变量的位置创建缓冲区,然后将其设置为&#34;&#34;清除它,然后在程序结束时删除它。

请告诉我这是否有帮助!

答案 1 :(得分:0)

Balthos提出了很好的观点,我认为你可以做得更多。我对你的功能的改编如下。注意事项:

  1. 我实施了Balthos的建议(上文) &#39;而&#39;循环,缓冲区创建/删除。
  2. 我更改了功能签名。鉴于Skip列表已通过 通过引用,必须在函数外部创建和删除 它在语法上令人困惑(无论如何)让他们从...返回 功能。所以,我通过了两个跳过列表(我们要求的条款,不是条款 发现)作为功能参数。请原谅我改变变量 名字 - 它帮助我更快地了解发生了什么。
  3. 没有必要将对象文本放在字符串中 - 这是 相对较慢并消耗直到之后才会被释放的内存 DOORS退出。所以,我把对象文本放在了早期的缓冲区中 功能,并搜索。 &#39; if(!null bufObjText)&#39;在我的第34行 相当于你的&#39; objText1!= null&#39;。如果您愿意,可以选择 (bufObjText!= null)&#39;做同样的事。
  4. 条件&#39; if(var_count == 0)&#39;是多余的 - 我感动了它 功能成为更早的&#39;如果&#39;阻止(我的第40行)。
  5. 我移动了删除,表格,行和单元格对象的测试,所以 它们发生在我们花时间用对象填充缓冲区之前 文本 - 只有在必要时才会这样做。
  6. 第2项可能不会对性能产生影响,但其他人会。唯一的问题是,有多大?

    请告知我们这是否会延长您现有的运行时间。我没有足够大的样本数据集来与您的代码进行有意义的比较。

    Module modCurrent = current
    
    Skip skUnused_Terminology_Data = create
    
    Skip skSeeking_Terminology_Data = create()
    
    put (skSeeking_Terminology_Data, 0, "SPONG")
    put (skSeeking_Terminology_Data, 1, "DoD")
    
    
    void Search_In_Entire_Module(Skip skTermsSought, skTermsNotFound)
    {
        Object obj
        Buffer bufObjText = create()
    
        int intSkipKey  = 0
        int index       = 0
        string strSkipData = ""
    
        for strSkipData in skTermsSought do
        {
            int var_count = 0
            bool blFoundTerm = false
    
            for obj in modCurrent do
            {
                if (isDeleted obj){continue}
                if (table obj)    {continue}
                if (row obj)      {continue}
                if (cell obj)     {continue}
    
                bufObjText = obj."Object Text"
    
                if (!null bufObjText) then
                {
                    Regexp re = regexp2 strSkipData
    
                    blFoundTerm = search (re, bufObjText, 0)
    
                    if ( blFoundTerm ) {
                        put(skUnused_Terminology_Data, intSkipKey, strSkipData)
                        intSkipKey++
                    }
                    bufObjText = ""
                }
            }
    
        delete (bufObjText)
    }
    
    
    Search_In_Entire_Module (skSeeking_Terminology_Data, skUnused_Terminology_Data)
    
    string strNotFound
    
    for strNotFound in skUnused_Terminology_Data do
    {
        print strNotFound "\n"
    }
    
    delete skUnused_Terminology_Data
    delete skSeeking_Terminology_Data