我使用Inno Setup#定义指令来定义安装程序中有关软件包的所有信息,然后使用其他指令来提取该字符串的部分。例如,使用以下命令,部件号(Package1)
将返回05414。
#define Package1 "05414 - My Package"
#define PartNumber(str Package) Copy(Package, 1, 5)
我在脚本和代码中使用这种方法,而且效果很好。然而,我遇到了一种情况,即通过编程生成字符串会很方便,而且我很难让它正常工作。例如,我想做以下事情。
procedure Foo(Package: String);
var
PartNumber: String;
begin
PartNumber:= ExpandConstant(Format('{#PartNumber(%s)}', [Package]));
end;
procedure Bar();
begin
Foo(ExpandConstant('{#Package1}'));
end;
Foo
的Package
参数是正确的,但我收到一个编译器错误消息
[ISPP]格式“%”没有参数。
它似乎不喜欢零件编号
行字符串中的 #
。即使在普通字符串中包含 # 也会产生“未终止的预处理器指令”错误,所以我认为它将
#
解释为精确说明符或其他东西。
有没有办法让它将< code>#视为文本的一部分,这样我就可以以编程方式扩展这个常量?如果没有,是否有其他方法可以实现这一点?
这是行不通的。
部件号
是一个预处理器函数/宏。它在编译时评估。它在运行时不存在。
当然,您可以实现等效的Pascal Script函数:
function PartNumberPascal(Package: string): string;
begin
Result := Copy(Package, 1, 5);
end;
procedure Foo(Package: String);
var
PartNumber: String;
begin
PartNumber := PartNumberPascal(Package);
end;
可能让你困惑的是这个电话:
Foo(ExpandConstant('{#Package1}'));
它可能会给您一种印象,即< code>ExpandConstant函数扩展了< code>Package1预处理程序定义。
它没有!
{#...} 语法(与 {...}
相反)不是常量。这是一个内联预处理器指令调用,其中,当未显式指定指令时,将隐含
发出
。所以 {#Package1}
与 {#emit Package1}
相同。与每个预处理器构造一样,它在编译时进行评估。
如果将 SaveToFile
预处理器函数调用添加到脚本末尾:
procedure Bar();
begin
Foo(ExpandConstant('{#Package1}'));
end;
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
编译后,检查预处理的内容。iss
是这样的。您将看到:
procedure Bar();
begin
Foo(ExpandConstant('05414 - My Package'));
end;
Package1
已扩展为其值。但是ExandConstant
仍然存在,因此它完全没用!('05414-My Package'
中没有常量)
这将产生相同的效果:
procedure Bar();
begin
Foo('{#Package1}');
end;
对于类似的问题,请参阅:
在Inno Setup Pascal Script中评估运行时来自预处理器的数据集合
我有一个关于邮递员的共享收藏。当我在共享集合中运行请求时,它失败并显示以下错误: 评估预先请求脚本时出错:错误:意外的令牌 我已经用几个请求试过了,最简单的请求是对“http://localhost:8000/v1/resource”的GET请求,没有参数、授权、头、正文或请求前脚本,仍然会出现上述错误。 检查邮递员的控制台时,我看到以下错误: JSONError:意外令牌' 和上面的那个吻合。
问题内容: 来自我的Web应用程序的XML响应既有HTML添加到页面,又有一些要运行的脚本。 我正在尝试从Web应用发送回XML,例如: 我现在正在做的是抢购和CDATA,将html插入页面并评估。 我正在寻找对我的方法的批评。任何人有什么建议吗? 问题答案: 您宁愿发送JSON,它也更易于解释。例:
我正试图发送一个邮件请求,以创建一个使用邮递员的用户。需要动态用户电子邮件和密码。 我正在尝试在新变量中赋值,从邮递员内置变量中的返回-
我对使用JMeter的groovy是新手。我试图从groovy脚本中获取格林威治时间上午12:00的时间戳,并将其转换为Epoc计时器
为了复制此场景,我编写了以下SQL脚本: 我已经使用IntelliJ运行了这个脚本,它按预期工作。 但是,当我将脚本放入@SQL注释中时,我遇到了以下错误: 这就产生了以下错误,这就更没有意义了: 最值得注意的是,删除BEGIN和END语句(只保留INSERT INTO语句)是可行的。 那么Spring JDBC不支持begin/end块吗?pretest@sql注释是否有我不知道的限制?还是我错
问题内容: 我正在尝试创建用于设置Docker容器的Shell脚本。我的脚本文件如下所示: 运行此脚本文件将在新调用的bash中运行容器。 现在,我需要运行一个脚本文件(test.sh),该文件已经位于上述给定的shell脚本的容器内(例如:cd /path/to/test.sh && ./test.sh),该怎么做? 问题答案: 您可以使用以下命令在正在运行的容器中运行命令: 并从bash会话运