2

I wrote a script for DOORS 9.5 that looks in a DOORS module for specific Objects and writes them in a csv-file. However after a specific number of lines it stops writing in the csv-file and i got only half of my requested Objects. I'm using a String replacement function that i found in the internet. So thats maybe the problem or is there some kind of maximum for dxl to write in csv files?

Would be very nice if anyone could help me with this, because i cant find any solution for this in the internet or understand why this wont work.

// 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
4

3 回答 3

1

我终于找到了解决问题的方法(我知道替换功能有点糟糕^^)。dxl 脚本似乎有一个内部计时器。当计时器到时,即使进程仍在执行,脚本也会自动结束。所以我的脚本总是在 x 秒后停止,这就是我从未在我的 csv 文件中获得所有数据的原因。如果您有同样的问题,请尝试pragma runLim,0。它将计时器设置为无限制。您还可以通过将 0 替换为任意数字来选择计时器。(对于我的目的,2000000 最适合)。

感谢所有答案和帮助

于 2015-10-07T13:31:21.627 回答
0

我知道输出到 CSV 没有行限制。

但我确实在您的替换功能中看到了一些奇怪的东西。就 DOORS 而言,您的sSearch变量始终\n是 1 个字符(回车)。但在以下行中i=1

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

sSearch位置没有任何字符,1因为字符串数组从0.

我认为您需要将 for 循环更改为:

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

我的猜测是您的脚本在第一次找到带有回车符的对象时失败。

让我知道这是否有帮助,祝你好运!

于 2015-05-20T15:45:00.460 回答
0

在将对象文本输出到 CSV 时,您必须注意许多问题。您是否正在处理替换逗号,或者至少引用文本?如果对象文本中有一个 OLE 怎么办?等等。

如果您手动执行此操作,我建议您设置一个视图,其中包含您想要查看为列的属性和一个过滤器以仅包含您想要查看的对象,然后使用本机 DOORS 导出到 Excel(模块窗口:文件 >导出 > Microsoft Office > Excel)。如果您确实需要 CSV,则可以从 Excel 中另存为 CSV。

如果您使用脚本自动执行此操作,我建议您使用 Excel 的 DXL 库,例如: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

于 2015-05-21T08:32:15.477 回答