H
Hugo Y Mercado-Otero
Guest
I have'd create this algorithm for a alphanumeric numbering en PROGRESS OPENEDGE. the problem that I see is that it is totally sequential and when the sequence grows it will get much more slow. I would like to see if there is a way to rearrange function so it will be efficient no matter which number is given on the input parameters.
here is the code:
/* LOAN-ORDER-FUNCTION.i */
DEF VAR i-NUMBER-IN AS INT. DEF VAR o-order AS CHAR.
DEF VAR cnt AS INTEGER.
DEF VAR NUMERAL AS INTEGER. DEF VAR CODE-OUT AS CHAR FORMAT "X(5)".
DEF VAR LETTERs1 AS CHAR EXTENT 24 INITIAL ["A","B","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","W","X","Y","Z"].
DEF VAR LETTERs2 AS CHAR EXTENT 26 INITIAL ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"].
FUNCTION BIG-NUMBER RETURNS CHAR (INPUT COMPANY AS CHAR, INPUT NUMBER-IN AS INTEGER):
DEF VAR LETTER1 AS integer INITIAL 1 . DEF VAR LETTER2 AS INTEGER INITIAL 1 . DEF VAR LETTER3 AS INTEGER INITIAL 1 .
DEF VAR i AS integer INITIAL 1 NO-UNDO. DEF VAR j AS integer INITIAL 1 NO-UNDO. DEF VAR k AS integer INITIAL 1 NO-UNDO.
DEF VAR CODIGO AS CHAR.
DEF VAR in-letter2 AS INT NO-UNDO. DEF VAR in-letter1 AS INT NO-UNDO.
CNT = 0.
IF NUMBER-IN < 100000 THEN
RETURN COMPANY + STRING(NUMBER-IN,"99999").
REPEAT LETTER1 = 1 TO 24:
DO i = 0 TO 9999:
CODIGO = COMPANY + LETTERS1[LETTER1] + string(i,"9999").
IF CNT + 100000 = NUMBER-IN THEN
RETURN CODIGO.
cnt = cnt + 1.
END.
DO i = 0 TO 999:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS1[LETTER2] + string(i,"999").
IF CNT + 100000 = NUMBER-IN THEN
RETURN CODIGO.
cnt = cnt + 1.
END.
DO letter2 = 1 TO 26:
DO letter3 = 1 TO 26:
DO i = 0 TO 99:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS2[LETTER2] + LETTERS2[LETTER3] + string(i,"99").
IF CNT + 100000 = NUMBER-IN THEN
RETURN CODIGO.
cnt = cnt + 1.
END.
END.
END.
ASSIGN letter2 = 1
letter3 = 1.
END.
END FUNCTION.
FUNCTION BIG-TO-NUMBER RETURNS INTEGER (INPUT codigo-in AS CHAR):
DEF VAR LETTER1 AS integer INITIAL 1 . DEF VAR LETTER2 AS INTEGER INITIAL 1 . DEF VAR LETTER3 AS INTEGER INITIAL 1 .
DEF VAR i AS integer INITIAL 1 NO-UNDO. DEF VAR j AS integer INITIAL 1 NO-UNDO. DEF VAR k AS integer INITIAL 1 NO-UNDO.
DEF VAR codigo AS CHAR.
CNT = 0.
IF codigo-in < "AA0000" THEN
RETURN integer(SUBSTRING(codigo-in, 2)).
REPEAT LETTER1 = 1 TO 24:
DO i = 0 TO 9999:
CODIGO = COMPANY + LETTERS1[LETTER1] + string(i,"9999").
IF CODIGO = codigo-IN THEN
RETURN CNT + 100000.
cnt = cnt + 1.
END.
DO i = 0 TO 999:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS1[LETTER2] + string(i,"999").
IF CODIGO = codigo-IN THEN
RETURN CNT + 100000.
cnt = cnt + 1.
END.
DO letter2 = 1 TO 26:
DO letter3 = 1 TO 26:
DO i = 0 TO 99:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS2[LETTER2] + LETTERS2[LETTER3] + string(i,"99").
IF CODIGO = codigo-IN THEN
RETURN CNT + 100000.
cnt = cnt + 1.
END.
END.
END.
ASSIGN letter2 = 1
letter3 = 1.
END.
END FUNCTION.
thanks in advance for your time and effort,
Hugo
hugoyamil@yahoo.com
Puerto Rico
Continue reading...
here is the code:
/* LOAN-ORDER-FUNCTION.i */
DEF VAR i-NUMBER-IN AS INT. DEF VAR o-order AS CHAR.
DEF VAR cnt AS INTEGER.
DEF VAR NUMERAL AS INTEGER. DEF VAR CODE-OUT AS CHAR FORMAT "X(5)".
DEF VAR LETTERs1 AS CHAR EXTENT 24 INITIAL ["A","B","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","W","X","Y","Z"].
DEF VAR LETTERs2 AS CHAR EXTENT 26 INITIAL ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"].
FUNCTION BIG-NUMBER RETURNS CHAR (INPUT COMPANY AS CHAR, INPUT NUMBER-IN AS INTEGER):
DEF VAR LETTER1 AS integer INITIAL 1 . DEF VAR LETTER2 AS INTEGER INITIAL 1 . DEF VAR LETTER3 AS INTEGER INITIAL 1 .
DEF VAR i AS integer INITIAL 1 NO-UNDO. DEF VAR j AS integer INITIAL 1 NO-UNDO. DEF VAR k AS integer INITIAL 1 NO-UNDO.
DEF VAR CODIGO AS CHAR.
DEF VAR in-letter2 AS INT NO-UNDO. DEF VAR in-letter1 AS INT NO-UNDO.
CNT = 0.
IF NUMBER-IN < 100000 THEN
RETURN COMPANY + STRING(NUMBER-IN,"99999").
REPEAT LETTER1 = 1 TO 24:
DO i = 0 TO 9999:
CODIGO = COMPANY + LETTERS1[LETTER1] + string(i,"9999").
IF CNT + 100000 = NUMBER-IN THEN
RETURN CODIGO.
cnt = cnt + 1.
END.
DO i = 0 TO 999:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS1[LETTER2] + string(i,"999").
IF CNT + 100000 = NUMBER-IN THEN
RETURN CODIGO.
cnt = cnt + 1.
END.
DO letter2 = 1 TO 26:
DO letter3 = 1 TO 26:
DO i = 0 TO 99:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS2[LETTER2] + LETTERS2[LETTER3] + string(i,"99").
IF CNT + 100000 = NUMBER-IN THEN
RETURN CODIGO.
cnt = cnt + 1.
END.
END.
END.
ASSIGN letter2 = 1
letter3 = 1.
END.
END FUNCTION.
FUNCTION BIG-TO-NUMBER RETURNS INTEGER (INPUT codigo-in AS CHAR):
DEF VAR LETTER1 AS integer INITIAL 1 . DEF VAR LETTER2 AS INTEGER INITIAL 1 . DEF VAR LETTER3 AS INTEGER INITIAL 1 .
DEF VAR i AS integer INITIAL 1 NO-UNDO. DEF VAR j AS integer INITIAL 1 NO-UNDO. DEF VAR k AS integer INITIAL 1 NO-UNDO.
DEF VAR codigo AS CHAR.
CNT = 0.
IF codigo-in < "AA0000" THEN
RETURN integer(SUBSTRING(codigo-in, 2)).
REPEAT LETTER1 = 1 TO 24:
DO i = 0 TO 9999:
CODIGO = COMPANY + LETTERS1[LETTER1] + string(i,"9999").
IF CODIGO = codigo-IN THEN
RETURN CNT + 100000.
cnt = cnt + 1.
END.
DO i = 0 TO 999:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS1[LETTER2] + string(i,"999").
IF CODIGO = codigo-IN THEN
RETURN CNT + 100000.
cnt = cnt + 1.
END.
DO letter2 = 1 TO 26:
DO letter3 = 1 TO 26:
DO i = 0 TO 99:
CODIGO = COMPANY + LETTERS1[LETTER1] + LETTERS2[LETTER2] + LETTERS2[LETTER3] + string(i,"99").
IF CODIGO = codigo-IN THEN
RETURN CNT + 100000.
cnt = cnt + 1.
END.
END.
END.
ASSIGN letter2 = 1
letter3 = 1.
END.
END FUNCTION.
thanks in advance for your time and effort,
Hugo
hugoyamil@yahoo.com
Puerto Rico
Continue reading...