如果数据不完整,首先让我道歉。这不是我的懒惰,但我不知道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*
此致
答案 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文件/成员名称用于目录并将其导出。然后它将显示正确的文本。不确定此信息对您有何帮助。