首页 > 解决方案 > 如何为每个循环导出一个文本文件?

问题描述

我已经编写了一个将文件导出到特定目录的程序,我觉得我写了一些不需要的逻辑。所以我想知道导出文件的简短和最佳方法。让我分享我尝试过的

DEFINE VARIABLE cData AS CHARACTER NO-UNDO.
DEFINE VARIABLE i     AS INTEGER NO-UNDO.
DEFINE VARIABLE icount AS INTEGER NO-UNDO.
DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.

DEFINE TEMP-TABLE ttdata
    FIELD GetName  AS CHARACTER 
    FIELD iValue   AS INTEGER.

ASSIGN
    icount = 2
    cPath  = "*******".

DO I = 1 TO icount:
    IF I = 1  THEN cName = "David".
    IF I = 2  THEN cName = "Macavo".


   CREATE ttdata.
   ASSIGN
        ttdata.GetName = cName
        ttdata.iValue  =  100.
END.

/** ttdata has two records now*/
FOR EACH ttdata.
    RUN CallProc.p (INPUT ttdata.GetName,
                    INPUT ttdata.iValue).
END.

PROCEDURE CallProc:

    DEFINE INPUT PARAMETER getName AS CHARACTER NO-UNDO.
    DEFINE INPUT PARAMETER iValue  AS INTEGER   NO-UNDO.

    OUTPUT TO cPath.
    PUT UNFORMATTED ttdata.GetName ttdata.GetName.
    OUTPUT CLOSE.
END PROCEDURE.

从我的逻辑来看,它运行良好并按我的预期导出了 2 个文件,但调用另一个程序是个坏主意。请帮助这个案例。

标签: openedgeprogress-4gl

解决方案


如果您需要两个(或更多)单独的导出文件,则需要为它们指定唯一名称。我在这里通过重用您的“I”变量并每次重新分配 cPath 来做到这一点。尽管我不同意调用单独的过程来编写文件是一个坏主意,但我已将其合并到单个 FOR-EACH 循环中。我还修正了 idspispopd 提出的一些观点。

DEFINE VARIABLE i     AS INTEGER NO-UNDO.
DEFINE VARIABLE icount AS INTEGER NO-UNDO.
DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.

DEFINE TEMP-TABLE ttdata NO-UNDO
    FIELD GetName  AS CHARACTER 
    FIELD iValue   AS INTEGER.

ASSIGN
    icount = 2.

DO I = 1 TO icount:
    /* Using a CASE statement makes it easier to add in other values in the future */
    CASE I:
        WHEN 1 THEN cName = "David".
        WHEN 2 THEN cName = "Macavo".
    END CASE.

    CREATE ttdata.
    ASSIGN
        ttdata.GetName = cName
        ttdata.iValue  =  100.
END.

/** ttdata has two records now*/
I = 1.
FOR EACH ttdata NO-LOCK:

    cPath = ".\" + STRING(I) + ".txt".

    OUTPUT TO VALUE(cPath).
    PUT UNFORMATTED ttdata.GetName ttdata.iValue SKIP.
    OUTPUT CLOSE.

    I = I + 1.
END.

推荐阅读