用dxl将DOORS对象导出到csv文件不会写入所有对象?

2024-03-29 07:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我为doors9.5编写了一个脚本,在DOORS模块中查找特定对象,并将它们写入csv文件中。但是在特定的行数之后,它停止在csv文件中写入,我只得到了请求的对象的一半。 我用的是我在网上找到的一个字符串替换函数。所以这可能就是问题所在,或者dxl在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

Tags: 文件csvposforstringreturnifch
3条回答

在将对象文本输出到CSV时,有很多问题需要处理。你在考虑替换逗号,还是至少引用文本?如果对象文本中有OLE怎么办?等等

如果您是手动执行此操作,我建议您设置一个视图,其中包含您希望看到的列属性和一个过滤器,以便只包含您要查看的对象,然后使用native DOORS导出到Excel(“模块窗口:文件”>;“导出”>;“Microsoft Office”>;“Excel”)。如果你真的需要一个CSV,你可以从Excel保存为CSV。在

如果您使用脚本自动执行此操作,我建议您使用用于Excel的DXL库,例如:http://www.baselinesinc.com/dxl-repository/

(但请注意,在Windows计划任务中使用Excel存在问题。)

如果你不能访问Excel,那么你可以在网上寻找一些C代码,用来写CSV,然后把DXL建立在这个基础上。在

希望有帮助。在

编辑:另外,这里有一个很好的转义函数的链接:https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014627043

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

谢谢所有的答案和帮助

据我所知,输出到CSV没有行限制。在

但我确实在你的替换函数中看到了一些奇怪的东西。您的sSearch变量总是\n,就DOORS而言,它是1个字符(回车符)。但是在下面的一行i=1

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

sSearch1位置没有任何字符,因为字符串数组从0开始。在

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

^{pr2}$

我猜你的脚本在第一次找到一个包含回车符的对象时失败了。在

如果有帮助请告诉我,祝你好运!在

相关问题 更多 >