读取和排序可变长度的CSV文件

时间:2011-06-27 03:54:47

标签: cobol

我们正在使用OpenVMS系统,我相信它正在使用Cobol from HP

使用大量记录(500mb或更多)的数据文件可变长度。记录以逗号分隔。我想解析每个记录并提取相应的字段进行处理。在那之后,我可能想要通过某些特定字段对其进行排序。是否可以使用cobol?

我见过仅使用固定长度记录进行排序。

4 个答案:

答案 0 :(得分:2)

可变长度没有问题,不确定在VMS cobol中是如何做到的,但IBM的用途是: -

文件部分。
 FD文件记录因长度不同而有所不同  01 THE-RECORD PICTURE X(5000)。
 工作储存部分。
 01 REC-LENGTH PICTURE 9(5)COMPUTATIONAL。

当您读取文件时“REC-LENGTH”将包含记录长度,当写入记录时,它将写入长度为REC-LENGTH的记录。

要处理分隔的记录文件,您可能需要使用“UNSTRING”动词转换为固定格式。这非常冗长(但这是COBOL)。

    UNSTRING record DELIMITED BY ","
INTO field1, field2, field3, field4, field5 etc....
END-UNSTRING

一旦记录采用固定格式,您就可以正常使用SORT。

答案 1 :(得分:0)

Cobol SORT动词将满足你的需要。

如果SD文件包含可变长度记录,则所有KEY数据项必须包含在记录的前n个字符位置中,其中n等于最小记录大小 为文件指定。换句话说,它们必须处于固定部分。

但是,您可以使用输入程序轻松解决此问题。这将允许您创建一个虚拟文件,其密钥位于正确的位置。在输入过程中,您将把变量(逗号分隔,记录)重新格式化为在前面有键的变量,然后将其“释放”到排序。

答案 2 :(得分:0)

如果我的内存是正确的,VMS有一个SORT / MERGE实用程序,您可以在将文件处理成固定文件格式后使用(也可以使用变量)。通常,独立SORT实用程序的性能优于内联COLBOL SORT,如果排序条件将来发生变化,则可以更好地进行设计。

答案 3 :(得分:0)

无需在COBOL中编写解决方案,至少不需要对文件进行排序。 UNIX排序实用程序应该可以正常运行,只需调用sort -t',' - n,可能还有其他一些选项。