如何在Enterprise Architect代码生成模板中避免引号问题

3

我希望能为枚举值添加更详细的描述。因此,我会在枚举的属性中添加一个名为Description的自定义标记值(Tagged Value),以提供描述。目标是,在生成代码时仅在存在这样的标记值时,向所标记的枚举属性添加自定义C#属性。因此,我需要编辑属性声明的代码生成模板。当前使用的方法为:

$hasDescription = %attTag:"Description" ? "true" : "false"%
%if $hasDescription == "true"%
[Description(%qt%%attTag:"Description"%%qt%)]
%endIf%

这段代码可以输出我想要的结果。但是,如果值中有引号,它会破坏输出的代码文件。这样就无法编译。因此,我需要替换/转义标记值中值字段中的所有引号。我尝试了以下方法(以各种组合形式):

%REPLACE(attTag:"Description", "\"", "\\\"")%
%REPLACE(attTag:"Description", """", "\\""")%
%REPLACE(attTag:"Description", "%qt%", "%sl%%qt%")%
%REPLACE(attTag:"Description", %qt%, %sl%%qt%)%

注意: %qt% 用于插入 "%sl% 用于插入 \ (参考文献)

但两者都无法起作用。要么原样字符串将被插入到生成的代码文件中,要么在标记值的值中的引号不会发生任何变化。

那么有没有一种方法可以转义这些字符,以便能够在代码模板中替换它们呢?


使用 Enterprise Architect 13.5.1351

问题首先在 SE Software Engineering 上提出。


我记得这个问题曾经在Sparx论坛上被问到过,我也试图从那些所谓的帮助文档中找出答案,但是没有成功。我建议远离那些令人费解的宏语言,使用API生成代码会更简单,并且你可以拥有想要的所有自由度。 - qwerty_so
@ThomasKilian,我找到了一种实现我想要的东西的方法。你所说的“使用 API 生成代码”是什么意思?我对 EA 不太熟悉,只是在寻找“生成代码”的时候使用了我找到的第一个命令。你手头有什么资源可以为我提供一些信息吗? - Tim
现在我又想起了%qt% ;-)我没有公共资源,但我的做法是获取一个包并从中提取类。对于一个类,你需要创建一个类框架(带有“write”语句),然后在里面扩展操作、属性/关联和操作。这非常直接。我可以草拟一些伪代码。 - qwerty_so
1个回答

1

我查看了其他提供的模板,再经过一番尝试后终于找到了解决方案。宏可以接受带引号的文本或变量作为参数。由于直接在REPLACE宏中使用转义序列不起作用,所以我尝试先将它们赋值给变量:

$qt = %qt%
$escape = %sl% + %qt%
$description = %REPLACE(attTag:"Description", $qt, $escape)%

那就这样了。最终可用。第二行很重要,在%sl%%qt%之间添加+,即使关于代码模板语法>字面文本的文档表明不需要。使用$escape = %sl%%qt%不起作用,因为它只给我一个\而没有"
变量$description并不是必须的,但为了可读性而添加。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接