如何使用 ENTRY in progress 4GL 匹配两条记录?
How to matches two records using ENTRY in progress 4GL?
我写了一个匹配两条记录的程序。如果它匹配,那么我需要一条消息 "Matched" 但这里的问题是我不知道如何匹配。让我分享我的程序
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 的条目 1(即 S)。
当 20 时,对于 ENTRY 2,我想达到 600(即 tt_datacEndCode = 60)。
这里的问题是我不能有最多 600 个 WHEN 语句。所以你能帮助这个案例吗?
对于您展示的示例,您可以删除 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 */
我写了一个匹配两条记录的程序。如果它匹配,那么我需要一条消息 "Matched" 但这里的问题是我不知道如何匹配。让我分享我的程序
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 的条目 1(即 S)。
当 20 时,对于 ENTRY 2,我想达到 600(即 tt_datacEndCode = 60)。
这里的问题是我不能有最多 600 个 WHEN 语句。所以你能帮助这个案例吗?
对于您展示的示例,您可以删除 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 */