我们定期在独立网络上设置新的DOORS安装,并且每个网络使用的驱动器映射和安装目录都略有不同。我们有一组DXL脚本,可以复制到使用DOORS的每个网络上,但是这些DXL脚本引用了一些Microsoft Word模板,这些模板用作自定义开发的模块导出脚本的基础。
我们内部不再拥有DXL专家,我正在尝试使脚本更具可移植性,以使它们不再
不再包含硬编码的文件路径。因为我们将所有模板和DXL文件复制到预定义的目录结构中,所以我可以使用dxlHere()
函数来找出DXL脚本的执行路径,该脚本将打印出以下内容:
<C:\path\to\include\file\includeFile.inc:123>
<C:\path\to\include\file\includeFile.inc:321>
<Line:2>
<Line:5>
<Line:8>
我想做的是提取file\includeFile.inc:123>
之前的所有内容,不包括开头的<
。然后我要附加templates\template.dotx
。
例如,最终结果将是:
C:\path\to\inclue\template.dotx
是否有内置的DXL函数来处理这样的字符串操作?正则表达式是走的路吗?如果是这样,什么正则表达式将适合处理此问题?
谢谢!
答案 0 :(得分:0)
我得到了...这种工作。
dxl我在这里工作不多,但这似乎可以工作-只要将其保存到实际的dxl或inc文件中即可(即,不仅从编辑器运行)
string s = dxlHere()
string s2 = null
string s3 = null
Regexp r = regexp2 ( "\\..*:.*> $" )
Regexp r2 = regexp2 ( "/" )
if ( r s ) {
s2 = s[ 1 : ( ( start ( 0 ) ) - 1 ) ]
s3 = s[ 1 : ( ( start ( 0 ) ) - 1 ) ]
int x = 0
while ( r2 s2 ) {
x++
s2 = s2[ ( ( start ( 0 ) ) + 1 ) : ]
}
int z = 0
for ( y = 0; y <= length( s3 ); y++ ){
if ( s3[y] == '/' ) {
z++
if ( z == ( x - 2 ) ) {
s = s3[ 0 : y ]
break
}
}
}
}
print s
因此,我们正在执行一个正则表达式,以检查我们是否具有有效的“位置”,然后遍历它以查找曾经的“ /”字符,然后省略最后两个字符。
希望这会有所帮助!