【问题标题】:reading and sorting a variable length CSV file读取和排序可变长度的 CSV 文件
【发布时间】:2011-06-27 03:54:47
【问题描述】:

我们使用的是 OpenVMS 系统,我相信它使用的是Cobol from HP

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

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

【问题讨论】:

    标签: cobol


    【解决方案1】:

    可变长度没问题,不确定在 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。

    【讨论】:

    • 但我只见过基于固定格式的排序。您的意思是将可变长度记录解串成不同的固定长度列吗?
    【解决方案2】:

    Cobol SORT 动词可以满足您的需求。

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

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

    【讨论】:

      【解决方案3】:

      如果我没记错的话,VMS 有一个 SORT/MERGE 实用程序,您可以在将文件处理为固定文件格式(也可以使用变量)后使用该实用程序。通常,独立的 SORT 实用程序比内联 COLBOL SORT 执行得更好,并且如果将来排序标准发生变化,则可以进行更好的设计。

      【讨论】:

        【解决方案4】:

        不需要用 COBOL 写解决方案,至少不需要对文件进行排序。 UNIX 排序实用程序应该可以做到这一点,只需调用 sort -t ',' -n 并可能有几个其他选项。

        【讨论】:

        • OpenVMS UNIX。尝试提出适合问题的解决方案。
        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        • 2016-01-05
        相关资源
        最近更新 更多