如何使用DOORS DXL读取解析CSV文件以创建模块对象链接?
实现步骤与DXL脚本示例
前置准备
- 确认CSV格式:每行严格为
源对象绝对ID,目标对象绝对ID,无多余空格;若有表头,需在脚本中跳过第一行 - 确保DOORS源模块、目标模块已存在,且你拥有编辑权限
- 提前创建好用于存储跨模块链接的链接模块(Link Module),记好模块名称
完整DXL脚本示例
// 配置参数,根据实际情况修改 string csvFilePath = "C:/your_path/link_map.csv" // CSV文件路径 string linkModuleName = "CrossModuleLinks" // 链接模块名称 Module sourceMod = null Module targetMod = null // 打开源模块与目标模块(替换为你的模块实际路径) sourceMod = open("/Project/Requirements/Source_Module", false) // false表示可编辑模式 targetMod = open("/Project/Design/Target_Module", false) // 检查模块是否成功打开 if (null sourceMod || null targetMod) { print "无法打开源/目标模块,请检查路径或权限\n" exit } // 打开CSV文件 Stream csvStream = read(csvFilePath) if (null csvStream) { print "无法读取CSV文件,请检查路径是否正确\n" close(sourceMod) close(targetMod) exit } string line Object sourceObj, targetObj int lineCount = 0 // 逐行解析CSV并创建链接 while (readline(csvStream, line)) { lineCount++ // 跳过空行 if (length(line) == 0) continue // 分割行数据(按逗号拆分) int commaIndex = index(line, ",") if (commaIndex == -1) { print "第" stringOf(lineCount) "行格式错误,无分隔符,已跳过\n" continue } string sourceAbsId = trim(substring(line, 0, commaIndex)) string targetAbsId = trim(substring(line, commaIndex+1, length(line))) // 查找源对象 sourceObj = object(sourceMod, sourceAbsId) if (null sourceObj) { print "第" stringOf(lineCount) "行:源模块未找到绝对ID为[" sourceAbsId "]的对象,已跳过\n" continue } // 查找目标对象 targetObj = object(targetMod, targetAbsId) if (null targetObj) { print "第" stringOf(lineCount) "行:目标模块未找到绝对ID为[" targetAbsId "]的对象,已跳过\n" continue } // 创建跨模块链接 Link newLink = create(sourceObj, targetObj, linkModuleName) if (null newLink) { print "第" stringOf(lineCount) "行:创建链接[" sourceAbsId "->" targetAbsId "]失败\n" } else { print "第" stringOf(lineCount) "行:成功创建链接[" sourceAbsId "->" targetAbsId "]\n" } } // 清理资源 close(csvStream) close(sourceMod) close(targetMod) print "链接创建任务执行完成\n"
关键细节说明
- 模块打开:
open()函数的第二个参数设为false才能获得编辑权限,没有权限无法创建链接 - CSV解析:用
trim()去除ID前后的空格,避免因格式问题导致对象查找失败;若CSV有表头,需在循环前额外执行一次readline(csvStream, line)跳过表头行 - 对象定位:
object(模块, 绝对ID字符串)是通过绝对ID查找对象的核心函数,绝对ID格式为模块ID:对象ID(如10001:56),必须完全匹配 - 链接创建:
create(源对象, 目标对象, 链接模块名)会在指定的链接模块中生成跨模块链接,需确保链接模块已存在且有权限访问
注意事项
- 执行脚本前建议备份源模块和目标模块,避免误操作导致数据丢失
- 若处理大量链接(数千条以上),建议分批次执行脚本,避免DOORS出现卡顿或响应延迟
- 若需要反向创建链接(目标到源),只需调换
create()函数中的源对象和目标对象位置即可
内容的提问来源于stack exchange,提问作者earl_igginotnum
相关产品推荐
相关产品推荐

