Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用dxl将DOORS对象导出到csv文件不会写入所有对象?_Python_String_Csv_Ibm Doors - Fatal编程技术网

Python 使用dxl将DOORS对象导出到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

我为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
//字符串替换函数
字符串替换(字符串源、字符串搜索、字符串替换)
{
int iLen=长度sSource
如果(iLen==0)返回“”
int iLenSearch=长度(sSearch)
如果(iLenSearch==0)
{ 
打印“搜索字符串不得为空”
返回“”
}
//读取第一个字符以进行后面的比较->速度优化
char firstChar=sSearch[0]
缓冲区s=create()
int pos=0,d1,d2;
int i
而(posoutfile2据我所知,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最适合)

谢谢你的回答和帮助