Python 使用dxl将DOORS对象导出到csv文件不会写入所有对象?
我为DOORS 9.5编写了一个脚本,它在DOORS模块中查找特定对象,并将它们写入csv文件。然而,在特定数量的行之后,它停止在csv文件中写入,我只得到了我请求的对象的一半。 我正在使用我在互联网上找到的字符串替换函数。这可能就是问题所在,或者dxl在csv文件中写入的最大值是多少 如果有人能帮我的话,我会非常高兴,因为我在互联网上找不到解决这个问题的方法,也不明白为什么这个方法行不通Python 使用dxl将DOORS对象导出到csv文件不会写入所有对象?,python,string,csv,ibm-doors,Python,String,Csv,Ibm Doors,我为DOORS 9.5编写了一个脚本,它在DOORS模块中查找特定对象,并将它们写入csv文件。然而,在特定数量的行之后,它停止在csv文件中写入,我只得到了我请求的对象的一半。 我正在使用我在互联网上找到的字符串替换函数。这可能就是问题所在,或者dxl在csv文件中写入的最大值是多少 如果有人能帮我的话,我会非常高兴,因为我在互联网上找不到解决这个问题的方法,也不明白为什么这个方法行不通 // String replacement function string replace (string
// 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
//字符串替换函数
字符串替换(字符串源、字符串搜索、字符串替换)
{
int iLen=长度sSource
如果(iLen==0)返回“”
int iLenSearch=长度(sSearch)
如果(iLenSearch==0)
{
打印“搜索字符串不得为空”
返回“”
}
//读取第一个字符以进行后面的比较->速度优化
char firstChar=sSearch[0]
缓冲区s=create()
int pos=0,d1,d2;
int i
而(pos outfile2据我所知,CSV的输出没有行限制
但是我确实在replace函数中看到了一些奇怪的东西。您的sSearch
变量始终是\n
,就DOORS而言,它是1个字符(回车符)。但是在下面的一行I=1
:
if (sSource[pos+i] != sSearch[i]) { found = false; break }
sSearch
在位置1
处没有任何字符,因为字符串数组从0
开始
我认为您需要将for循环更改为:
for (i = 0; i < iLenSearch; i++)
(i=0;i
我猜您的脚本在第一次找到包含回车符的对象时失败了
如果这有帮助,请告诉我,祝你好运!将对象文本输出到CSV时,你必须注意很多问题。你是否注意替换逗号,或者至少引用文本?如果对象文本中有OLE怎么办?等等 如果您是手动执行此操作,我建议设置一个视图,其中包含您希望作为列显示的属性,并设置一个过滤器,以仅包含您希望查看的对象,然后使用本机DOORS导出到Excel(模块窗口:文件>导出>Microsoft Office>Excel)。如果您确实需要CSV,则可以将Excel另存为CSV 如果使用脚本自动执行此操作,我建议使用DXL库for Excel,例如: (但请注意,在Windows计划任务中使用Excel存在问题。) 如果您没有Excel的访问权限,那么您可以在网络上查找一些用于写入CSV的C代码,并以此为基础创建DXL 希望有帮助
编辑:还有,这里有一个好的转义函数的链接:我终于找到了问题的解决方案(我知道replace函数有点糟糕^^)。 dxl脚本似乎有一个内部计时器。当计时器启动时,脚本将自动结束,即使进程仍在执行。因此,我的脚本总是在x秒后停止,这就是我从未获得csv文件中所有数据的原因。 如果您有相同的问题,请尝试
pragma runLim,0
。它将计时器设置为无限。您也可以通过将0替换为任意数字来选择计时器。(就我而言,2000000最适合)
谢谢你的回答和帮助