|
|
PROBLEM:
=======
The following program will get a Runtime error NAT1326:
* see Software AG Support Incident 113138 ...
DEFINE DATA LOCAL
1 #A (A) DYNAMIC
1 #COL (I2) INIT <1> (EM=ZZ9)
1 #I (I2) (EM=ZZ9)
END-DEFINE
*
EXPAND DYNAMIC VARIABLE #A TO 500
*
FOR #I = 1 TO 20
* MOVE 'ABC' TO SUBSTRING(#A,#COL,5) /* 5 is OK
MOVE 'ABC' TO SUBSTRING(#A,#COL,4) /* but 4 gets error NAT1326 when #I=2
*
PRINT (AD=IL SG=OFF ZP=ON)
#I
'=' #COL (CD=YE)
'=' *LENGTH(#A) (CD=RE)
#A (AD=D CD=GR)
*
#COL := #COL + 5
END-FOR
*
END
.
EXPLANATION (from R&D):
===========
The second iteration of the FOR loop would extend the dynamic variable and fill positions 6-9 with 'ABC' but it would create a "gap" of uninitialized memory at position 5.
The "uninitialized gap" is the reason for the NAT1326.
.
CHANGE ENHANCEMENT REQUEST:
==========================
Q. Could you enhance the behaviour of the statement "MOVE...TO SUBSTRING" for DYNAMIC variables, so that Natural will "automatically" initialize any "gap positions" with blanks, please? - thanks
.
REASON:
======
The current behaviour is unintuitive.
This change enhancement would make Natural's behaviour more intuitive and useful for the programmer.
And after all, isn't that what Natural is supposed to do?
| Created on Brainstorm | 12/14/2016 05:49 PM |
| Brainstorm ID | 4380 |
The Expand command does not initiate the field with a value, it is allocating memory space.
In order to achieve this you could use this command:
MOVE ALL ' ' TO #A UNTIL 500
And no error will occur.