【问题标题】:How can I include a file (#include <>) using a variable path in DXL (IBM DOORS)?如何使用 DXL (IBM DOORS) 中的可变路径包含文件 (#include <>)?
【发布时间】:2019-05-16 10:07:28
【问题描述】:

基本上,我所做的是从批处理文件执行 DXL。该批处理文件从 java 代码中获取一些路径,并将路径发送到 DXL。

我得到了 DXL 中的路径(它实际上是一个普通字符串),现在我想使用这些路径字符串来制作一些#include。

所以,如果我有一个变量:

string a = "MY/PATH/IS/OK"

我想用那个 a 来做一个包含:

#include <a/whatever.inc>

有人知道怎么做吗?

除了... 我想要做的包含与 DXL 脚本在同一个文件夹中,它必须执行上述操作...我可以使用类似的东西:

#include <.\the_include_file.inc>

还是这样的?

【问题讨论】:

    标签: include ibm-doors


    【解决方案1】:

    在 DXL 中,#include 命令在评估任何其他 DXL 命令之前进行评估(基本上,预处理器仅获取引用文件的内容并将包含 #include 的行替换为脚本的内容。 所以,一个像sn-p这样的

    string a = ..read_some_value_from_a_file..
    #include <{a}/whatever.inc>
    

    不起作用(好吧,只能在 eval_ 语句中,但这太复杂了)

    我认为解决您的问题的最简单方法是在 DOORS 启动之前调用您的 java 代码,然后使用 -addins 参数调用doors.exe,有​​关详细信息和替代方法,请参阅https://www-01.ibm.com/support/docview.wss?uid=swg21324525https://www-01.ibm.com/support/docview.wss?uid=swg21421641。另外,请查看 Louie Landale 在https://www.ibm.com/developerworks/community/forums/html/topic?id=d43c725f-bd74-4c1a-88d5-51fdf8eed0b9 的摘要,其中还提到了您可以使用的环境变量。

    更新: 前段时间,我们对搜索dxl文件的顺序做了一些测试,这里是一些脚本摘录。

        string sCur                 = currentDirectory()             ; buf += sCur             ; buf += ";"
        string sInst                = (getenv "DOORSHOME") "\\lib\\dxl"; buf += sInst            ; buf += ";"
        string sAddinsCmd           = (getenv "DOORSADDINS")         ; buf += sAddinsCmd       ; buf += ";"        
        string sAddins              = (getenv "ADDINS")              ; if (null sAddinsCmd) buf += sAddins; buf += ";"
    
        string sProjectAddinsCmd    = (getenv "DOORSPROJECTADDINS")  ; buf += sProjectAddinsCmd; buf += ";"
        string sProjectAddins       = (getenv "PROJECTADDINS")       ; if (null sProjectAddinsCmd) buf += sProjectAddins   ; buf += ";"
    

    所以,如果你用命令启动 DOORS

    C:\> D:
    D:\> cd \temp
    D:\temp> "c:\Program Files\IBM\DOORS\9.6\bin\doors.exe" -addins E:\scripts
    

    并且您有一个包含相对路径的语句,即#include &lt;src/lib/hello.inc&gt;,DOORS 首先尝试在 D:\temp 中查找目录 src,然后在 c:\Program Files\IBM...\lib\dxl 中查找目录,然后在 E:\scripts 中。

    如果您的 include 语句具有绝对路径,即 #include &lt;c:/myscripts/lib/dxl/goodmorning.inc&gt;#include &lt;\\\\myservername\\myshare\\dxllib\\helloibm.inc&gt;,它将完全在这些位置中查找。

    【讨论】:

    • 但是@Mike,有没有办法包含同一文件夹中的文件...我的意思是一种:#include <.>
    • #include 或 #include <.> 或 #include <.> 与 "."是我的答案更新中提到的目录之一
    • 还有一条评论:DXL 没有脚本“基本路径”的概念,DXL 除了#include-Statements 之外,对代码所在的文件一无所知,甚至删除了#include从预处理器。在 Perl 中,您可以说“perl c:\allmyscripts\helloworld.pl”,在 perl 脚本中,您可以询问 helloworld.pl 所在的目录(dirname $0),然后“push @INC, dirname $0”。这在 DXL 中是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多