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到一个目录,然后导出来。然后它会显示正确的文本。不确定此信息是否对您有帮助。
首先让我道歉,如果数据不是那么完整。这不是我懒惰,而是我不知道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到一个目录,然后导出来。然后它会显示正确的文本。不确定此信息是否对您有帮助。