RDW详解

概述

本文需要对Mainframe文件结构有基本的了解.

RDWRecord Descriptor Word(记录描述字)的缩写. RDW只存在变长记录(variable-length record),用于记录变长记录的实际长度.

COBOL程序员,RDW是透明的.但对HLASM程序员,若要操作变长记录,了解RDW的结构就非常必要了.

 

约定

每条变长记录的前4BytesRDW.定义文件时LRECL应该考虑RDW的长度,LRECL=80,那么记录实际上最长只能是76Bytes,还有4BytesRDW.

RDW的结构.RDW2Bytesbinary形式(half word)的记录长度,RDW2Bytes恒为low-value.

RDW=记录长度+RDW长度(4Bytes)

以下都以文件TEST.FILEA为例:

****** ***************************************

000001 1

000002 22

000003 ABCDEFGHIGKLMNOPQRSTUVWXYZ

 

查看

要看RDW很简单,使用SyncSort(DFSort)把前2Bytes转换为Display:

OUTFIL BUILD=(1,2,BI,TO=ZD),VTOF

结果:

00005

00006

00030

 

扩展知识(BDW)

   对于VB(Variable-bloacked),还有一个叫BDW的额外数据,BDWRDW相似,BDW则是一个块的长度.

 

V(RECFM=V):

      记录1           记录2

RDW

内容

RDW

内容

 

  VB(RECFM=VB):

                    1

BDW

RDW

内容

RDW

内容

 

 

                    2

BDW

RDW

内容

RDW

内容

 

 

 

想要看到BDW的内容则需要用IDCAM把文件的内容DUMP出来,要注意RECFM=U,声明为无格式的文件(可想象为Windows的二进制文件).这样就会把所有的内容都DUMP出来(包括BDW):

//VIEWBDW  EXEC PGM=IDCAM

//VBINPUT  DD   DSN=TEST.FILEA,DISP=SHR,RECFM=U

//SYSIN    DD   *

 PRINT INFILE(VBINPUT) DUMP

//SYSPRINT DD   SYSOUT=*

 

结果:

002D000000050000F1000600 00F2F200 1E0000C1 C2C3C4C5 C6C7C8C9 D1D2D3D4 D5D6D7D8 D9E2E3E4 E5E6E7

只有3条记录,都在第一个块中.2D(16)为块的长度,2D(16)=45(10) = 4(BDW) + 4*3(RDW) + 1(记录1) + 2(记录2) + 26(记录3)

 

posted @ 2012-04-21 12:15  小冰  阅读(3163)  评论(0编辑  收藏  举报