Как можно восстановить часть пути в dxlHere () и подняться на две папки? - PullRequest
0 голосов
/ 03 июля 2019

Мы регулярно устанавливаем новые установки 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 голосов
/ 08 июля 2019

Я получил это ... вроде как работает.

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

Таким образом, мы делаем одно регулярное выражение, чтобы проверить, есть ли у нас действительное «местоположение», затем пробегаем по нему, чтобы найти символ «/», затем оставляемот последних 2 из них.

Надеюсь, это поможет!

...