2012-11-06 85 views
2

一些atributtes拆分對象文本我使用了一年,但現在我要修改小腳本和我與DXL一個新手腳本。我在問題之前已經搜索過,但我不知道我該怎麼做。(DOORS/DXL)在使用Tab鍵

我必須建立一種腳本,其分析同一正式模塊中的所有對象,從每個「對象文本」不同由製表符分隔,在同一個對象的其他不同屬性被寫入字符串提取。

正式模塊的內容已經從Word進口。通過這種方式,普通文本格式被定義爲「對象文本」,並且每個標題樣式都與給定的水平標題相關聯。通過這種方式,每個對象都提供有對象標題或對象文本(但不能同時)。具有對象標題的對象不需要任何進一步的操作。但是,對於提供對象文本的對象,我必須從對象文本中提取一些由製表符分隔的屬性。

例如,一個典型的對象文本可能是:

NNNN  TEXT/TABLE/OLE OBJECT/ANY OTHER STRING  (XXXXXX)  (YYYYYY) 

應用腳本之後,它應該被轉換爲:

Attribute 1: NNNN 
Object Text: TEXT/TABLE/OLE OBJECT/ANY OTHER STRING 
Attribute 2: XXXXXX 
Attribute 3: YYYYYY 

我有小腳本例子,但我已經通過了所有的早晨試圖修改它得到我需要,但我不能這樣做:

Object o = current 
//bool get_text(Object o) {return o."Object Heading" "" != ""} 
string get_text(Object o) 
{ 
    if (o."Object Heading" "" != "") 
     return "Object Heading" 
    else 
     return "Object Text" 
} 
Regexp r_id = regexp "(http://0-9a-z/.+) " 
for o in current Module do 
{ 
    string texto = o.(get_text(o)) 
    if (r_id text) 
    { 
     o."Attribute 1" = textmatch 1 
     string input = richTextWithOle(o.(get_text(o))) 
     string output = cutRichText(input, 0, length(textmatch 1)) 
     o.(get_text(o)) = richText(output) 
    } 

} 
+0

請按照壓痕下一次。 –

+0

@Abhishek Bhatia感謝您糾正我的消息。對不起。請原諒我,我也是這個網站的新手。 –

回答

2

這是一個複雜的,但我想我已經想通了。感謝您發佈此內容,因爲我可能會在將來也發現它很有用。

我嘗試了這一點,似乎工作:

Object o 

string get_text(Object o) 
{ 
    if (o."Object Heading" "" != "") 
     return "Object Heading" 
    else 
     return "Object Text" 
} 

char cTab = '\t' //The tab character to find 
Buffer b = create 
string tmp = "" //Needed to concatenate buffer parts 
int offset = 0 

for o in current Module do 
{ 
    string attr = get_text(o) 
    b = o.attr      //Put the contents in the buffer 
    offset = contains(b, cTab)  //Find the first tab 
    o."Attribute 1" = b[0:offset-1] //Set the first Attribute 
    b = b[offset+1:]    //Remove the first attribute from the text 

    offset = contains(b, cTab) 
    if(offset > -1) 
    { 
     if(attr == "Object Heading") o.attr = b[0:offset-1] 

     b = b[offset+1:] 

     offset = contains(b, cTab) 
     if(offset > -1) 
     { 
     o."Attribute 2" = b[1:offset-2] //Set the second Attribute without the() 
     b = b[offset+1:] 

     o."Attribute 3" = b[1:length(b)-2] //Set the third Attribute without the() 
     } else { 
     o."Attribute 2" = b[1:length(b)-2] //Set the second Attribute without the() 
     } 
    } else { 
     if(attr == "Object Heading") o.attr = b[0:] 
    } 

    if(attr == "Object Text") 
    { 
     b = richTextWithOle(o.attr) ""  //This section removes the attributes from the contents without losing the rich text formatting and OLEs that may be present. 

     string word = o."Attribute 1" 
     offset = contains(b, word, 0) 
     tmp = b[0:offset-1] "" b[(offset+length(word)+5):] 
     b = tmp 

     word = "(" o."Attribute 2" ")" 
     offset = contains(b, word, 0) 
     if(offset > -1) 
     { 
     tmp = b[0:offset-6] "" b[offset+length(word):] 
     b = tmp 
     } 

     word = "(" o."Attribute 3" ")" 
     offset = contains(b, word, 0) 
     if(offset > -1) 
     { 
     tmp = b[0:offset-6] "" b[offset+length(word):] 
     } 

     o.attr = richText(tmp)  //Set the Object Text or Heading 
    } 
} 

delete b      //Release the buffer resources 

讓我知道這是否給你任何麻煩,或者如果你想要的代碼的更詳細的explination。

編輯:我更新了上面的代碼把你提到的具體問題護理。現在應該全部設置。讓我知道你是否有更多的麻煩。

+0

謝謝你的回答!這對我來說非常有用。 起初它給我運行時錯誤。爲了嘗試它,我必須修改行以設置對象文本或標題。我通過「richTextWithOle(tmp)」更改了「richtext(tmp)」。 我認爲這個腳本對許多人來說可能非常有用。您可以維護層次結構(如rtf導入)和一些屬性信息(如電子表格導入)。 –

+0

它工作正常,但我仍然需要糾正2件事,以便我可以使用它。我希望你可以幫助我: 1.-我需要與對象文本的對象,應完全按照您編程分裂。但是,沒有對象文本的對象(它們只提供對象標題)只能由屬性1和對象標題分割。 2.-與對象文本中的所有對象具有至少1片(屬性1個+對象文本),但其它片(屬性2和3)可能會丟失。在這種情況下,他們應該被忽略。現在,如果它們中的任何一個丟失,則會顯示運行時錯誤。 謝謝你的幫助! –

+0

謝謝。它適用於對象標題,但對於對象文本,儘管它在對象文本及其屬性中被很好地分割,但新屬性不會從原始對象文本中刪除。我很抱歉再次打擾你。我試圖修改它,但我不知道DXL,我試圖修改代碼有時沒有成功。 –