Cobol数据文件

时间:2017-04-03 21:14:23

标签: cobol

如果数据不完整,首先让我道歉。这不是我的懒惰,但我不知道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.

以下是从notepad ++打开时的文件示例      RMKF II 0 **ƒ'* B9 * B9''ÿ#“c *B9Þ#01 EGP%10%ƒ21$ '10 ' (@P )€ 010 0 0 EGP $21 $%11 $ (EGP $21 $%11 $ 7EGP $21 $ %11 $ FEGP $21 $%11 $ UEGP $21 $%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.

我找到了他们称之为副本的这个文件。不知道它是如何相关的

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*

此致

2 个答案:

答案 0 :(得分:5)

您可以找到可以为您提取的服务。如果您采用这条路线,请确保他们拥有您可以提供的所有信息(必须包括FD下的数据定义),并同意仅按已验证的数据收据付款。

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

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

然后,用您的首选语言处理非分隔记录(固定长度)二进制数据,并计算出COMP-3,COMP-6和任何其他COMP-(或COMP)字段的含义。它们可能是压缩十进制,二进制编码十进制(BCD)或"某种类型的二进制"鉴于标准COBOL的二进制字段受十进制值限制(与PICture子句的大小相同)。

在第一和第二种替代方案中,对提取物的可靠性有更大的期望。第三个可能是最便宜的",但是期望完成的时间更难以坚持。

在前两个中,成本是可能的决定因素(假设您不打算继续使用COBOL)。如果你自己必须写一些COBOL程序,不要担心,它们非常非常简单,一旦你完成了一个,你只需要克隆"它

答案 1 :(得分:1)

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