如果可能,如何显示未知的变量列表及其值
How to show an unknown list of variables and their values, if possible
正如之前在 some questions with "Progress-4GL" and "OpenEdge" tags 中提到的,我正在使用 AppBuilder 和过程编辑器。因此,调试的可能性非常有限:为了了解变量的值,我需要在屏幕上显示它们,如下所示:
MESSAGE "temp1=[" temp1 "], temp2=[" temp2 "]" VIEW-AS ALERT-BOX.
我也可以将这些信息放在日志文件中,但这不是这里的重点。
我想写一个程序来处理这个问题,比如:
PROCEDURE SHOW_VARIABLES_AND_VALUES (INPUT I1, INPUT I2, ...):
1. <put parameter names and values together inside one string> => """I1="" I1"
2. <do this for all input parameters (the number is unknown)> => """I1="" I1, ""I2="" I2, ..."
3. <how to use this (MESSAGE VIEW-AS ALERT-BOX, LOG, ...) there I'll know what to do>
有人知道前两点怎么处理吗(把变量名和值放在一起,处理未知数量的输入参数)?
提前致谢
您可以使用 SUBSTITUTE 函数。
MESSAGE SUBSTITUTE ("temp1=&1 ~ntemp2=&2 ~n temp3=&3",
temp1,
temp2,
temp3) VIEW-AS ALERT-BOX.
遗憾的是,无法动态访问变量或参数。所以没有办法自动将所有输入参数添加到消息字符串中。 ABL 中也没有 anytype 参数类型——用于用户定义的函数或过程。因此,您必须经常使用 STRING() 函数将输入参数转换为字符串,作为最适合所有参数的参数。
另一方面,内置的 SUBSTITUTE 函数可以处理任何类型的参数。所以temp1、temp2和temp3实际上可以是任何数据类型的变量或参数。
正如我对您之前的一个问题的评论之一所提到的:给 OpenEdge 调试器一个机会。 Progress Developer 工作室之外的调试器看起来很有历史意义。但它确实起作用了。
同时我决定使用以下系统(因为我的要求似乎是不可能的):
MESSAGE "temp1=[" temp1 "]~n" ~
"temp2=[" temp2 "]~n" ~
"temp3=[" temp3 "]~n" ~
"temp4=[" temp4 "]" ~
VIEW-AS ALERT-BOX.
为了方便使用,我找到了波浪字符的以下键盘“快捷键”:ALT+0126.
正如 Stefan 所指出的,这要好得多(没有波浪号,也不需要快捷方式):
MESSAGE "temp1=[" temp1 "]" SKIP
"temp2=[" temp2 "]" SKIP
"temp3=[" temp3 "]" SKIP
"temp4=[" temp4 "]" SKIP
VIEW-AS ALERT-BOX.
正如之前在 some questions with "Progress-4GL" and "OpenEdge" tags 中提到的,我正在使用 AppBuilder 和过程编辑器。因此,调试的可能性非常有限:为了了解变量的值,我需要在屏幕上显示它们,如下所示:
MESSAGE "temp1=[" temp1 "], temp2=[" temp2 "]" VIEW-AS ALERT-BOX.
我也可以将这些信息放在日志文件中,但这不是这里的重点。
我想写一个程序来处理这个问题,比如:
PROCEDURE SHOW_VARIABLES_AND_VALUES (INPUT I1, INPUT I2, ...):
1. <put parameter names and values together inside one string> => """I1="" I1"
2. <do this for all input parameters (the number is unknown)> => """I1="" I1, ""I2="" I2, ..."
3. <how to use this (MESSAGE VIEW-AS ALERT-BOX, LOG, ...) there I'll know what to do>
有人知道前两点怎么处理吗(把变量名和值放在一起,处理未知数量的输入参数)?
提前致谢
您可以使用 SUBSTITUTE 函数。
MESSAGE SUBSTITUTE ("temp1=&1 ~ntemp2=&2 ~n temp3=&3",
temp1,
temp2,
temp3) VIEW-AS ALERT-BOX.
遗憾的是,无法动态访问变量或参数。所以没有办法自动将所有输入参数添加到消息字符串中。 ABL 中也没有 anytype 参数类型——用于用户定义的函数或过程。因此,您必须经常使用 STRING() 函数将输入参数转换为字符串,作为最适合所有参数的参数。
另一方面,内置的 SUBSTITUTE 函数可以处理任何类型的参数。所以temp1、temp2和temp3实际上可以是任何数据类型的变量或参数。
正如我对您之前的一个问题的评论之一所提到的:给 OpenEdge 调试器一个机会。 Progress Developer 工作室之外的调试器看起来很有历史意义。但它确实起作用了。
同时我决定使用以下系统(因为我的要求似乎是不可能的):
MESSAGE "temp1=[" temp1 "]~n" ~
"temp2=[" temp2 "]~n" ~
"temp3=[" temp3 "]~n" ~
"temp4=[" temp4 "]" ~
VIEW-AS ALERT-BOX.
为了方便使用,我找到了波浪字符的以下键盘“快捷键”:ALT+0126.
正如 Stefan 所指出的,这要好得多(没有波浪号,也不需要快捷方式):
MESSAGE "temp1=[" temp1 "]" SKIP
"temp2=[" temp2 "]" SKIP
"temp3=[" temp3 "]" SKIP
"temp4=[" temp4 "]" SKIP
VIEW-AS ALERT-BOX.