如何使用进行中的ENTRY 4GL匹配两个记录?

时间:2019-03-26 11:25:10

标签: openedge progress-4gl

我写了一个程序来匹配两个记录。如果它匹配,那么我需要有一条消息“匹配”,但是这里的问题是我对如何匹配一无所知。让我分享我的程序

DEFINE VARIABLE cPos AS INTEGER NO-UNDO.
DEFINE TEMP-TABLE tt_data NO-UNDO
      FIELD cPosition AS CHARACTER FORMAT "X(60)"
      FIELD cEndCode  AS CHARACTER
      FIELD cShotCode AS CHARACTER. 

CREATE tt_data.
ASSIGN
tt_data.cPosition ="S$$$^^^^^^^^^^$$$^^^MC^^^^^^^^^^^^R^^^^^^^^^^^^^^^^^^^^^^^^^"
tt_data.cEndCode =  10
tt_data.cShotCode = "S".

CASE tt_data.cEndCode:

WHEN 10 THEN DO:
cPos = 1.
END.

WHEN 20 THEN DO:
cPos = 2.
END.
.
.
.
WHEN 600 THEN DO:
cPos = 60
END.

END CASE.

FIND FIRST tt_date WHERE tt_data.cShotCode = SUBSTRING(tt_data.cPosition,cPos,1) NO-LOCK NO-ERROR. 

DISPLAY tt_data.cShotCode. /* Displayed Value is S */

如果您看到tt_datacEndCode的值为10,则表示其指向tt_data.cPosition(即S)的ENTRY 1。

当20时,就像明智地输入2一样,我希望达到600(即tt_datacEndCode = 60)。

这里的问题是我不能拥有最多600个WHEN语句。所以请您帮忙此案?

1 个答案:

答案 0 :(得分:2)

对于您显示的示例,您可以消除CASE语句,而只需将其替换为:

cPos = integer( tt_data.cEndCode / 10 ).

(假设,如图所示,cEndCode始终是10的倍数,并且所需的cPos是该值的1/10。)

因此:

DEFINE VARIABLE cPos AS INTEGER NO-UNDO.
DEFINE TEMP-TABLE tt_data NO-UNDO
      FIELD cPosition AS CHARACTER FORMAT "X(60)"
      FIELD cEndCode  AS CHARACTER
      FIELD cShotCode AS CHARACTER. 

CREATE tt_data.
ASSIGN
tt_data.cPosition ="S$$$^^^^^^^^^^$$$^^^MC^^^^^^^^^^^^R^^^^^^^^^^^^^^^^^^^^^^^^^"
tt_data.cEndCode =  10
tt_data.cShotCode = "S".

cPos = integer( tt_data.cEndCode / 10 ).

FIND FIRST tt_date WHERE tt_data.cShotCode = SUBSTRING(tt_data.cPosition,cPos,1) NO-LOCK NO-ERROR. 

DISPLAY tt_data.cShotCode. /* Displayed Value is S */