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

Cobol 读取和排序可变长度的CSV文件,cobol,Cobol,我们正在使用OpenVMS系统,我相信它正在使用 具有大量记录(500mb或更多)的数据文件,这些记录长度可变。记录以逗号分隔。我想解析每个记录并提取相应的字段进行处理。在那之后,我可能想按某些特定字段对其进行排序。有可能用cobol吗 我只见过使用固定长度记录进行排序。可变长度没有问题,不确定在VMS cobol中如何进行排序,但用于此的IBME是:- 文件节。 FD文件记录随REC长度而变化。 01录制图片X(5000)。 工作存储区。 01 REC长度图片9(5)计算 读取文件时,“REC

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

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


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

可变长度没有问题,不确定在VMS cobol中如何进行排序,但用于此的IBME是:-

文件节。
FD文件记录随REC长度而变化。
01录制图片X(5000)。
工作存储区。
01 REC长度图片9(5)计算

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

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


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

Cobol排序动词将执行您需要的操作

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


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

如果我的内存正确,VMS有一个排序/合并实用程序,您可以在将文件处理为固定文件格式后使用它(也可以使用变量)。通常情况下,独立排序实用程序的性能优于联机COLBOL排序,并且如果将来排序标准发生变化,它的设计也会更好

不需要用COBOL编写解决方案,至少不需要对文件进行排序。UNIX排序实用程序应该可以很好地完成这项工作,只需调用sort-t','-n,也许还有一些其他选项。

但我只见过基于固定格式的排序。您的意思是将可变长度记录解压为不同的固定长度列吗?OpenVMS UNIX。尝试提出适合问题的解决方案。
    UNSTRING record DELIMITED BY ","
INTO field1, field2, field3, field4, field5 etc....
END-UNSTRING