Consultor Eletrônico



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.