我来自Java / .NET背景并试图学习ABL,但结构上的差异和互联网上有限的信息使得它很难。我想要做的是从文本文件导入数据,格式如下:
john smith 52 ceo
...
逐行,并根据角色的位置拍摄不同的部分。例如,位置1-10表示名字,10-20秒表示等等...... 我是否必须使用条目?如果有,那么更有经验的人可以举例说明这样做会导致我很困惑。然后我需要将每行的记录添加到我创建的名为tt-employee的临时表中。 我该如何做?
如果我的问题有点含糊,我道歉,但正如我所说,我是新手,所以我还在搞清楚。
答案 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/