2015-05-12 34 views
2

我爲DOORS 9.5編寫了一個腳本,它在DOORS模塊中查找特定對象並將它們寫入csv文件中。但是,在特定數量的行停止寫入csv文件後,我只獲得了一半所需的對象。 我正在使用在互聯網上找到的字符串替換功能。所以這可能是問題或者有什麼最大的dxl寫入CSV文件?使用dxl將DOORS對象導出到csv文件將不會寫入所有對象?

如果有人能幫助我,這將是非常好的,因爲我無法找到任何解決方案,在互聯網上或理解爲什麼這不會工作。

// String replacement function 
string replace (string sSource, string sSearch, string sReplace) 
{ 
int iLen = length sSource 
if (iLen == 0) return "" 

int iLenSearch = length(sSearch) 

if (iLenSearch == 0) 
{ 
    print "search string must not be empty" 
    return "" 
} 

// read the first char for latter comparison -> speed optimization 
char firstChar = sSearch[0] 

Buffer s = create() 
int pos = 0, d1,d2;  
int i 

while (pos < iLen) { 
    char ch = sSource[pos]; 
    bool found = true 

    if (ch != firstChar) {pos ++; s+= ch; continue} 
    for (i = 1; i < iLenSearch; i++) 
     if (sSource[pos+i] != sSearch[i]) { found = false; break } 
    if (!found) {pos++; s+= ch; continue} 
    s += sReplace 
    pos += iLenSearch 
} 

string result = stringOf s 
delete s 
return result 
} 

Module m = read(modulePath, false) 
Object o 
string s 
string eval 

Stream outfile = write("D:\\Python\\Toolbeta\\data\\modules\\test.csv") 
for o in m do 
{ 
eval = o."Evaluation Spec Filter" 
if(eval == "Evaluation Step Object") 
{ 
    s = o."Object Text" 
    s = replace(s,"\n","\\n") 
outfile2 << o."HierarchyNumber" ";" s "\n" 
} 
} 
close outfile 

回答

1

我終於找到了解決我的問題(我知道的替換功能是有點蹩腳的^^)。 dxl腳本似乎有一個內部計時器。當定時器啓動時,即使進程仍然執行,腳本也會自動結束。所以我的腳本總是在x秒後停止,這就是我從未獲取我的csv文件中的所有數據的原因。 如果您遇到同樣的問題,請嘗試pragma runLim,0。它將計時器設置爲無限制。您也可以通過用任意數字替換0來選擇計時器。 (爲我的目的2000000最適合)。

Thx for all answers and the help

0

我知道輸出到CSV沒有行限制。

但是我確實在你的替換函數中看到了一些奇怪的東西。您的sSearch變量始終爲\n,就DOORS而言,它是1個字符(回車)。但在下面一行i=1

if (sSource[pos+i] != sSearch[i]) { found = false; break } 

sSearch根本不1位置有任何字符,因爲該字符串數組開始於0

我認爲你需要爲循環更改爲:

for (i = 0; i < iLenSearch; i++) 

我的猜測是,你的腳本失敗的第一次,它會發現在它回車的對象。

讓我知道如果有幫助,祝你好運!

0

將對象文本輸出到CSV時,您必須注意各種各樣的問題。你在照顧替換逗號,或至少引用文本?如果對象文本中有OLE,該怎麼辦?等

如果你手動這樣做,我會建議設置一個視圖,你想看到的屬性作爲列和一個過濾器,只包括你想看到的對象,然後使用本機DOORS導出到Excel (模塊窗口:文件>導出> Microsoft Office> Excel)。如果您確實需要CSV,則可以從Excel以CSV格式保存。

如果您正在使用腳本自動做這個,我會建議使用DXL庫爲Excel,如:http://www.baselinesinc.com/dxl-repository/

(但要注意也有在Windows計劃任務使用Excel的問題。)

如果您無法訪問Excel,那麼您可以查看用於寫入CSV的一些C代碼的網絡,並將DXL作爲其基礎。

希望有所幫助。

編輯:另外,這裏有一個很好的功能鏈接轉義:https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014627043