我为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
在将对象文本输出到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
:sSearch
在1
位置没有任何字符,因为字符串数组从0
开始。在我认为您需要将for循环改为:
^{pr2}$我猜你的脚本在第一次找到一个包含回车符的对象时失败了。在
如果有帮助请告诉我,祝你好运!在
相关问题 更多 >
编程相关推荐