Kbase 34410: How to EXPORT a record dynamically.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  5/10/1998 |
|
Solution ID: P4410
GOAL:
How to EXPORT a record into a variable.
GOAL:
How to EXPORT a record dynamically.
FACT(s) (Environment):
Progress 9.1D
FIX:
The following piece of code emulates a dynamic EXPORT statement, which is currently missing from the 4GL.
FUNCTION dynExport RETURNS CHARACTER
(INPUT hRecord AS HANDLE,
INPUT cDelim AS CHARACTER):
DEF VAR hFld AS HANDLE.
DEF VAR iCnt AS INTEGER.
DEF VAR iExtnt AS INTEGER.
DEF VAR cTmp AS CHARACTER.
DEF VAR cArray AS CHARACTER.
DEF VAR cResult AS CHARACTER.
IF hRecord:TYPE <> "BUFFER" THEN
RETURN ?.
DO iCnt = 1 TO hRecord:NUM-FIELDS:
ASSIGN hFld = hRecord:BUFFER-FIELD(iCnt).
IF hFld:EXTENT = 0 THEN DO:
ASSIGN cTmp = (IF hFld:BUFFER-VALUE = ? THEN "?"
ELSE
(IF hFld:DATA-TYPE = "character" THEN
QUOTER(hFld:BUFFER-VALUE)
ELSE IF hFld:DATA-TYPE = "raw" THEN
'"' + STRING(hFld:BUFFER-VALUE) + '"'
ELSE STRING(hFld:BUFFER-VALUE)))
cResult = (IF iCnt = 1 THEN cTmp
ELSE cResult + cDelim + cTmp).
END.
ELSE DO:
DO iExtnt = 1 TO hFld:EXTENT:
ASSIGN cTmp = (IF hFld:BUFFER-VALUE(iExtnt) = ? THEN "?"
ELSE
(IF hFld:DATA-TYPE = "character" THEN
QUOTER(hFld:BUFFER-VALUE(iExtnt))
ELSE IF hFld:DATA-TYPE = "raw" THEN
'"' + STRING(hFld:BUFFER-VALUE(iExtnt)) + '"'
ELSE STRING(hFld:BUFFER-VALUE(iExtnt))))
cArray = (IF iExtnt = 1 THEN cTmp
ELSE cArray + cDelim + cTmp).
END.
ASSIGN cResult = (IF iCnt = 1 THEN cArray
ELSE cResult + cDelim + cArray).
END.
END.
RETURN cResult.
END.
The function can be invoked to export the record content to a variable, as in:
DEF VAR myVar AS CHARACTER.
FIND FIRST customer.
ASSIGN myVar = dynExport(INPUT BUFFER customer:HANDLE, " ").
MESSAGE myVar VIEW-AS ALERT-BOX.
or to emulate a dynamic EXPORT statement, as in:
FIND FIRST customer.
OUTPUT TO test.txt.
PUT UNFORMATTED dynExport(INPUT BUFFER customer:HANDLE, " ") SKIP.
OUTPUT CLOSE.