Cobol 数据文件

Cobol data files

首先让我道歉,如果数据不是那么完整。这不是我懒惰,而是我不知道cobol的细节。

我在我的公司被指派从 cobol 程序读取的文件中提取我们的旧财务数据,并将它们转换到我们的 oracle DB 中的数据库中。我无法像普通文本一样阅读这些文件。我不知道如何转为普通文本。

根据 Cobol 源,每行有 7 条记录,每条记录有 72 个字符。

文件很大。每个平均为 3 GB。我怎样才能将它们作为普通文本打开?

这里是文件部分

000220 ENVIRONMENT DIVISION.
000230 CONFIGURATION SECTION.
000240 SOURCE-COMPUTER. NCR-3000.
000250 OBJECT-COMPUTER. NCR-3000.
000260 INPUT-OUTPUT SECTION.
000270 FILE-CONTROL.
000280     SELECT DQ-HIMVT-A      ASSIGN TO DISC
000290                            ORGANIZATION INDEXED
000300                            ACCESS MODE DYNAMIC
000310                            RECORD KEY CLE-A.
000320*
000330 DATA DIVISION.
000340 FILE SECTION.
000350 FD  DQ-HIMVT-A             BLOCK CONTAINS 7 RECORDS   
000360                            RECORD CONTAINS 73 CHARACTERS   
000370                            LABEL RECORD STANDARD
000380                            DATA RECORD IS HIMVT-A.   
000390 01  HIMVT-A. 
000400     02  CLE-A.
000410         03  ENT-A       PIC 99.
000420         03  NUCPT-A     PIC 9(13)     COMP-6.
000430         03  DEV-A       PIC XXX.
000440         03  DATOP-A     PIC 9(7)      COMP-6. 
000450         03  SIG-A       PIC 9.  
000460         03  FORC-A      PIC 9.
000470         03  DATVAL-A    PIC 9(7)      COMP-6.
000480         03  NUMOP-A     PIC 9(9)      COMP-6.  
000490         03  MT-A        PIC 9(12)V999 COMP-6. 
000500     02  FILLER          PIC X(8).
000510     02  TYPCPT-A        PIC 9(3)      COMP-6.
000520     02  LIBOP-A         PIC X(15).
000530     02  SOLD-A          PIC S9(12)V999 COMP-3. 
000540     02  DATTRAIT-A      PIC 9(7) COMP-6.
000550     02  FILLER          PIC X.

这是从记事本++打开的文件示例 RMKF I I 0 ** ƒ ' *B9 *B9 ' ' ÿ # "c *B9 Þ #01 EGP %10 % ƒ 21 $ '10 ' (@P )€ 010 0 0 EGP $ %11 $ (EGP $ %11 $ 7EGP $ %11 $ FEGP $ %11 $ UEGP $ %11 $ ` ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ >01 ÔEGP %10 % ÔƒÖ 21 不。 0 埃

环境部分

000220 ENVIRONMENT DIVISION.
000230 CONFIGURATION SECTION.
000240 SOURCE-COMPUTER. NCR-3000.
000250 OBJECT-COMPUTER. NCR-3000.
000260 INPUT-OUTPUT SECTION.
000270 FILE-CONTROL.
000280     SELECT DQ-HIMVT-A      ASSIGN TO DISC
000290                            ORGANIZATION INDEXED
000300                            ACCESS MODE DYNAMIC
000310                            RECORD KEY CLE-A.

我找到了这个他们称之为抄写本的文件。不知道和ois有什么关系

000100*
000200****     CINVDAT - ZONE DE TRAVAIL     ****
000300*******************************************
000400****
000500*
000600 01  INVDATRAV.
000700     03  INVZON1         PIC 99. 
000800     03  INVZON2         PIC 99.
000900     03  INVZON3         PIC 99.
001000 01  INVZONI             PIC 99.
001100 01  INVDATE             PIC 9(6).
001200 01  INVCAL              PIC 9.
001300*

此致

您或许可以找到可以为您提取数据的服务。如果您走这条路,请确保他们拥有您可以提供的所有信息(其中必须包括 FD 下的数据定义)并同意仅在经过验证的数据接收后付款。

另一种方法是与 Micro Focus 讨论 COBOL 的短期许可证,该 COBOL(同样必须保证)可以理解索引文件格式。然后,您为每个需要提取其数据的文件编写一个简单的程序。这里的优点是 COMP-3 和 COMP-6 代表什么,你不需要知道,因为转换为 "text" 数字是在没有任何人考虑的情况下完成的(在输出定义中,你删除所有对 COMP 的引用(还有 COMP,如果碰巧有的话))。

另一种选择是坐下来使用十六进制编辑器,了解数据,并弄清楚如何从数据中提取索引信息(所有数据记录都是已知的、固定的、长度为 73 字节的在你的例子中)。

然后,使用可以处理非定界记录(固定长度)二进制数据的首选语言,并计算出 COMP-3、COMP-6 和任何其他 COMP-(或 COMP)字段的含义。它们可能是压缩十进制、二进制编码的十进制 (BCD) 或 "some type of binary",因为标准 COBOL 具有受十进制值限制的二进制字段(限制为 PICture 子句的大小)。

在第一个和第二个备选方案中,对提取物的可靠性有更高的期望。第三个可能是"cheapest",但完成时间的预期更难坚持。

在前两者中,成本可能是决定因素(假设您以后不打算使用 COBOL)。如果您自己必须编写一些 COBOL 程序,请不要担心,它们非常非常简单,一旦完成,您只需 "clone" 即可。

我不确定您使用的是哪个系统。作为我在 AS400 的经验。使用EBCDIC格式的COBOL数据文件,不能直接用文本编辑器打开。它只会显示随机文本。在导出之前,您必须将其转换为 ASCII。在AS400中,我用CHGTOPCD file/member name到一个目录,然后导出来。然后它会显示正确的文本。不确定此信息是否对您有帮助。