Как сопоставить две записи, используя ENTRY в процессе 4GL? - PullRequest
0 голосов
/ 26 марта 2019

Я написал программу для сопоставления двух записей. Если это соответствует, то мне нужно иметь сообщение «Соответствует», но проблема здесь в том, что я не понимаю, как это сделать. Позвольте мне поделиться моей программой

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, что означает, что он указывает на ВХОД 1 из tt_data.cPosition (то есть S).

Когда 20, то для ENTRY 2, как и прежде, я хочу получить до 600 (т.е. tt_datacEndCode = 60).

Проблема в том, что у меня не может быть ЗАПИСЬ до 600. Итак, не могли бы вы помочь с этим делом?

1 Ответ

2 голосов
/ 26 марта 2019

В примере, который вы показали, вы можете исключить оператор 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 */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...