我有一个大型 ASCII 数据集(2.7gb),我相信它是 IMS 分层格式。我不确定如何访问数据以将其放入可用的数据库中,我猜是 SQL,但我对其他解决方案持开放态度。这是数据库附带的“布局”,如果它有帮助的话......
2 回答
如果您没有编程背景,那您就有大麻烦了!!!。Excel MsAccess 对您帮助不大。
所以答案是:
聘请一些有 Cobol / Cobol 转换经验的程序员!!!
UIC-MN-H10-段
Cobol Copybook 会告诉您文件的格式。UIC-MN-H10-SEGMENT 的格式是
2 byte segment id (10 ???)
4 byte year
2 Byte Month
4 byte average injection pressure etc
这是一个多记录文件。
您可能会使用的工具
RecordEditor可能能够显示文件(大小可能是个问题)。RecordEditor也需要一些时间来适应
Cobol例如GNU Cobol将需要 Cobol 程序员
Java / JRecord - 需要java程序员
- 如果它只有一条记录(不太可能),Cobol2Csv
为了给出更有意义的完整答案,请提供文本格式的 Cobol copybook 和一些示例数据
所以你在这里遗漏了一些关键信息。除了您粘贴的布局之外,您实际上还需要 IMS 数据库描述符 (DBD) 文件。IMS DBD 文件将描述数据库的结构。IMS 数据库中可以包含许多段(也称为表),DBD 将描述这些段以及其他信息,例如这些表的大小。
实际记录将以深度优先格式存储在平面文件(可能是您提到的 2.7gb ASCII 文件)中。因此,假设您有两个段 A 和 B,其中 B 是 A 的子项。您的平面文件可能看起来像这样 A1,B1,B2,B3,A2,B4,B5 其中 B1、B2 和 B3 是 A1 的子项和B4 和 B5 是 A2 的子级。这件事的原因是因为您的布局信息仅提供特定段结构的覆盖。
因此,如果您的数据库有多个 UIMNH10 段,您将不知道在 ASCII 文件中的哪个位置应用布局的起点。
现在让我们在这里做一个巨大的假设,即您的数据库只有一个段 UIMNH10。在这种情况下,您的 ASCII 文件将如下所示:A1、A2、A3、A4。这非常简单,因为您会重复地将布局应用于数据。
幸运的是,您的数据结构非常简单,因为它都是字符数据。您会将 PIC X(n) 解释为长度为 n 的字符串。类似地,对于 PIC 9(n),它将是长度为 n 的数字字符串。
假设您的样本数据以:AA201805 ...
RRC-H10-SEGMENT-ID is 'AA' because it's PIC X(2)
MN-H10-CENTURY is '20' because it's PIC 9(2)
MN-H10-YEAR is '18' because it's PIC 9(2)
MN-H10-MONTH is '05' because it's PIC 9(2)
您将这样做,直到您到达布局的末尾,然后从头开始重新开始您的下一条记录。这也是一个假设,即布局定义与记录的长度相匹配。
最好的办法是与您的 IMS 数据库管理员一起确认这些假设,但是一旦您了解了起点,您应该能够自己映射数据或编写一个快速程序来为您完成。还有一些其他的选择,但是假设一些后端设置,比如 SQL 支持读取数据并将其转储为 Excel 的 csv 文件格式。