如果可能,如何显示未知的变量列表及其值

问题描述

正如之前在 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.