【发布时间】:2011-06-27 03:54:47
【问题描述】:
我们使用的是 OpenVMS 系统,我相信它使用的是Cobol from HP。
具有大量可变长度记录的数据文件(500mb 或更多)。记录以逗号分隔。我想解析每条记录并提取相应的字段进行处理。之后,我可能想按某些特定字段对其进行排序。 cobol可以吗?
我见过仅使用固定长度记录进行排序。
【问题讨论】:
标签: cobol
我们使用的是 OpenVMS 系统,我相信它使用的是Cobol from HP。
具有大量可变长度记录的数据文件(500mb 或更多)。记录以逗号分隔。我想解析每条记录并提取相应的字段进行处理。之后,我可能想按某些特定字段对其进行排序。 cobol可以吗?
我见过仅使用固定长度记录进行排序。
【问题讨论】:
标签: cobol
可变长度没问题,不确定在 VMS cobol 中是如何完成的,但 IBMese 是:-
文件部分。
FD 文件记录因记录长度而异。
01 创纪录的图片 X(5000) .
工作存储部分。
01 REC-LENGTH 图片 9(5) 计算。
读取文件“REC-LENGTH”时会包含记录长度,写入记录时会写入长度为REC-LENGTH的记录。
要处理分隔的记录文件,您可能需要使用“UNSTRING”动词将其转换为固定格式。这非常冗长(但这是 COBOL)。
UNSTRING record DELIMITED BY ","
INTO field1, field2, field3, field4, field5 etc....
END-UNSTRING
一旦记录采用固定格式,您就可以正常使用 SORT。
【讨论】:
Cobol SORT 动词可以满足您的需求。
如果 SD 文件包含可变长度记录,则所有 KEY 数据项必须包含在记录的前 n 个字符位置内,其中 n 等于最小记录大小 为文件指定。换句话说,它们必须在固定部分。
但是,您可以使用输入程序轻松解决此问题。这将让您创建一个虚拟文件,其密钥位于正确的位置。在您的输入过程中,您将重新格式化您的变量、逗号分隔、记录,使其键位于前面,然后“释放”它以进行排序。
【讨论】:
如果我没记错的话,VMS 有一个 SORT/MERGE 实用程序,您可以在将文件处理为固定文件格式(也可以使用变量)后使用该实用程序。通常,独立的 SORT 实用程序比内联 COLBOL SORT 执行得更好,并且如果将来排序标准发生变化,则可以进行更好的设计。
【讨论】:
不需要用 COBOL 写解决方案,至少不需要对文件进行排序。 UNIX 排序实用程序应该可以做到这一点,只需调用 sort -t ',' -n 并可能有几个其他选项。
【讨论】: