如何检索dxlHere()的“路径”部分并上升两个方向?

时间:2019-07-03 14:32:40

标签: ibm-doors

我们定期在独立网络上设置新的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函数来处理这样的字符串操作?正则表达式是走的路吗?如果是这样,什么正则表达式将适合处理此问题?

谢谢!

1 个答案:

答案 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

因此,我们正在执行一个正则表达式,以检查我们是否具有有效的“位置”,然后遍历它以查找曾经的“ /”字符,然后省略最后两个字符。

希望这会有所帮助!