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

时间:2015-05-12 08:50:32

标签: python string csv ibm-doors

我为DOORS 9.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

3 个答案:

答案 0 :(得分:1)

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

所有答案的答案和帮助

答案 1 :(得分:0)

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

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

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

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

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

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

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

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

答案 2 :(得分:0)

将对象文本输出到CSV时,必须注意许多问题。你是在照顾替换逗号,还是至少引用文字?如果对象文本中有OLE,该怎么办?等

如果您是手动执行此操作,我建议您设置一个视图,其中包含要作为列查看的属性和一个仅包含您要查看的对象的过滤器,然后使用本机DOORS导出到Excel(模块窗口) :文件&gt;导出&gt; Microsoft Office&gt; 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