进度ABL - 剥离并添加到临时表

时间:2014-12-31 11:37:05

标签: openedge progress-4gl

我来自Java / .NET背景并试图学习ABL,但结构上的差异和互联网上有限的信息使得它很难。我想要做的是从文本文件导入数据,格式如下:

john     smith     52     ceo
...

逐行,并根据角色的位置拍摄不同的部分。例如,位置1-10表示名字,10-20秒表示等等...... 我是否必须使用条目?如果有,那么更有经验的人可以举例说明这样做会导致我很困惑。然后我需要将每行的记录添加到我创建的名为tt-employee的临时表中。 我该如何做?

如果我的问题有点含糊,我道歉,但正如我所说,我是新手,所以我还在搞清楚。

1 个答案:

答案 0 :(得分:2)

如果space是分隔符,则可以使用IMPORT语句。

DEFINE TEMP-TABLE tt-employee NO-UNDO
    FIELD firstname AS CHARACTER
    FIELD lastname  AS CHARACTER
    FIELD age       AS INTEGER
    FIELD empTitle  AS CHARACTER.

INPUT FROM c:\temp\indata.dat.
REPEAT:
    CREATE tt-employee.
    IMPORT DELIMITER " " tt-employee.
END.
INPUT CLOSE.

但是如果没有分隔符而是一个固定记录(如你所说)你可以做这样的事情(需要应用错误检查和正确的记录长度)。

/* Skipping temp-table definition - copy-paste from above */
DEFINE VARIABLE cRow AS CHARACTER   NO-UNDO.

INPUT FROM c:\temp\indata.dat.
REPEAT:

    IMPORT UNFORMATTED cRow.
    /* You could replace 0 with a higher number that qualifies a record so 
       SUBSTRING doesn't return an error if reading past end of line */
    IF LENGTH(cRow) > 0 THEN DO:
        CREATE tt-employee.
        ASSIGN 
            tt-employee.firstname = SUBSTRING(cRow, 1, 10)
            tt-employee.lastname  = SUBSTRING(cRow, 11, 10)
            tt-employee.age       = INTEGER(SUBSTRING(cRow, 21, 2))
            tt-employee.empTitle  = SUBSTRING(cRow, 23, 10) NO-ERROR.
    END.
END.
INPUT CLOSE.

网络上有几个地方可以查找OpenEdge信息:

官方知识库 - http://knowledgebase.progress.com/

官方社区 - https://community.progress.com/?Redirected=true

更多社区 - http://www.progresstalk.com/http://oehive.org/