我创建了一个DXL脚本,它遍历了几个模块的每一行。我正在打印某些行及其信息。我这样做是通过遍历各行的for循环来完成的,如果命中了我感兴趣的行,则将该行的列中的元素保存到不同的字符串变量中,然后打印这些字符串变量。如果模块没有很多我感兴趣的行,那么脚本运行时间不会太长,但是如果我想同时运行多个模块或者一个模块有很多我感兴趣的行,则脚本脚本可能需要几个小时。如果这还不足以提供解决方案,我可以展示我拥有的代码。任何帮助将不胜感激!
我尝试使用跳过列表在其中存储打印语句,然后尝试浏览跳过列表以打印每个值,但这并没有使脚本运行得更快。
string sep=","
for o in m do
{
string ver1= o."column1"
if (checkIf(o) && (!(isDeleted(o))))
{
string ver2= o."column2"
string onum=number(o)
""
string otext = o."Object Text"
print ver1 sep ver2 sep onum
}
}
答案 0 :(得分:0)
初始优化:
for o in m do
{
if (checkIf(o) && (!(isDeleted(o)))) {
//This doesn't appear to be used?
//string otext = o."Object Text"
print o."column1" "," o."column2" "," number(o) "\n"
}
}
理由:DOORS拥有一个称为字符串表的系统,该系统可在内存中保存已声明的字符串,并且不一定能在适当的时候尽最大努力清除它。通过不断在循环中声明字符串,您可能会遇到该系统的内存限制。
问题在于结果全部保存在“ DXL编辑器”小窗口中,然后必须将其复制并粘贴到其他位置才能真正使用它。
二次优化:
// Turn off runlimit for timing
pragma runLim , 0
// Set file location - CHANGE FOR YOUR COMPUTER
string csv_location = "C:/Users/Username/Desktop/Info_Collection.csv"
// Open stream
Stream out = append csv_location
// Set headers
out << "Module,Column 1,Column 2,Object Number" "\n"
// Define your loop constraints
Module m = current
Object o
// Run your loop
for o in m do
{
if (checkIf(o) && (!(isDeleted(o)))) {
//This doesn't appear to be used?
//string otext = o."Object Text"
out << fullName(m)","o."column1" "," o."column2" "," number(o) "\n"
}
}
close out
这将使您可以在不同的模块中运行相同的脚本,全部输出到相同的CSV文件,然后可以将其加载到Excel或所选的数据处理引擎中。
这可以使数据收集不在DOORS之外进行,因此,如果出现问题,您可以跟踪发生的地方。
我的第三个优化方法是使用excel中的模块列表作为输入并进行此分析,但这可能太过分了。
如果这没有帮助,那么我们可以开始研究其他问题。
注意-我仍然想知道'checkIf'是/确实是什么。
答案 1 :(得分:0)
如果您的目标是加快脚本的执行速度,因为大多数对象都不是您所感兴趣的,那么我所知道的最有效的方法是过滤掉大多数不感兴趣的对象,例如, obj。“ Object Text”!=“”的过滤器将过滤掉标题,如果您仅对需求感兴趣,obj。“ Object Text”包含“ [Ss] hall”等。另存为视图供以后使用。 因为在m do {中尊重显示集,所以如果您不触摸大多数对象,它将大大加快显示速度! 希望这可以帮助。 唐