IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

在COBOL和JCL中将VBS转换为VB


IBM大型机论坛 -> 科宝程式设计
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
srajendran2

新的用户


已加入:2008年5月13日
帖子:56
地点:钦奈

发布发表于:星期五六月01,2018 3:04上午
引用回复

当前,程序/ JCL正在创建VBS文件,并且必须根据客户的请求将其更改为VB文件。下面给出了COBOL和JCL上的代码。如果我在JCL中将录制模式更改为“ V”并将VBS更改为VB,它将起作用吗?还是我应该照顾程序或JCL中的其他内容?

科宝
码:

FD  SYS230-VAR-OUT
   记录取决于800-SYS230-RDW
    RECORDING MODE IS S
   标签记录是标准的
   阻止包含0个记录
   数据记录为SYS230-VAR-OUT-REC。

01  SYS230-VAR-OUT-REC.
    05  PIC X(01)发生1到32756次
       取决于800-SYS230-RDW。


JCL
码:

// SYS230    DD DSN=TEST.OUTPUT,
//             DISP=(,CATLG,DELETE),
//             SPACE=(CYL,(1,1),RLSE),
//             DCB=(RECFM = VBS,LRECL = 32760,BLKSIZE = 32760)


我看到了与此相关的帖子。但是它只是提到将JCL从VBS更改为VB,而没有提到记录模式。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表于:星期五六月01,2018 3:23上午
引用回复

引用:
如果我在JCL中将录制模式更改为“ V”并将VBS更改为VB,它将起作用吗?
应该,但是请注意,数据集的大小可能会大大增加。 VBS数据集的块中未使用的字节数不超过4个字节,而VB数据集的块中可能具有几乎LRECL的未使用字节数。具体情况将取决于数据,但预计需要增加的空间。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表于:星期五六月01,2018 7:40上午
引用回复

BLKSIZE = 32760是磁盘的不佳选择。您仅获得每条轨道的一条物理记录,并且不会使用该轨道的35%或40%。大多数加载模块数据集为RECFM = U,BLKSIZE = 32760。这有两个原因。
  • 您很少找到32K记录,更不用说接近32K的记录了。在大多数情况下,长文本记录之后将是一个或多个256字节记录;这些记录通常与文本记录相关,尽管最后一个记录将包含有关下一个文本记录的信息。
  • 活页夹比您想象的文本记录大小要聪明。例如,如果看到磁道上的剩余空间为12K,它将写入12K记录。这个未记录的功能给我留下了深刻的印象,但是我对此也有疑问。当我发现活页夹正在做什么时,我为FB或VB数据集编写了PDS副本,从而复制了此功能。效果很好,但是实际数据集的净节省却比我希望的要少。我不使用该程序。

RECFM = VB,LRECL = 32760,BLKSIZE = 32760将不被接受。在VB中,必须为BDW(块描述符字)留出4个字节。对于BLKSIZE = 32760,您可以指定的最大LRECL为32756。同样要记住,对于RECFM = VB或VBS,LRECL指定数据集中的最大记录。许多记录可以更小。 SMF是RECFM = VBS的主要用户。它以RECFM = VBS,LRECL = 32767开始,但是大多数记录要小得多。也许这个问题已经解决,但是您不能在JCL中指定LRECL = 32767,尽管DCB宏当然会接受它。

回到LRECL;我的程序之一指定RECFM = VB,LRECL = 4100。 19年前,当我设计该程序时,就想到了长期使用。它从未实现。实际上,最长的记录是120或130字节,但是LRECL从未改变。它不需要改变。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表于:星期五六月01,2018 7:57上午
引用回复

罗伯特·萨普(Robert Sample)写道:
引用:
如果我在JCL中将录制模式更改为“ V”并将VBS更改为VB,它将起作用吗?
应该,但是请注意,数据集的大小可能会大大增加。 VBS数据集的块中未使用的字节数不超过4个字节,而VB数据集的块中可能具有几乎LRECL的未使用字节数。具体情况将取决于数据,但预计需要增加的空间。
Sample先生说的不是VBS空间使用情况。 VBS有两个目标。
  • 写入大小恒定的物理记录(最后一条物理记录除外)。
  • 为了在第一个项目符号中实现该目标,如果一条记录无法放入当前的物理记录中,则它将被打破并“扩展”到下一个物理记录中。每个记录段都有一个4字节的描述符。适用于一个物理设备的逻辑记录的描述符只是常规的VB RDW。跨越多个物理记录的记录的每个段的描述符都类似于RDW。它具有标志来指示它是第一个段,一个段是继续到下一个物理记录的中间段或一个段是最后一个段。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表:星期五六月01,2018 12:03下午
引用回复

我创建了这个数据集。
码:
列出的writevbs.output       
 XXXXXX.WRITEVBS.OUTPUT     
 --RECFM-LRECL-BLKSIZE-DSORG
   VBS   32767 4096    PS   
 --VOLUMES--                 
   XXXX25
我写了一个32767字节的记录到数据集。它具有此逻辑视图-
码:
***记录1                                                       
                                                                   
0000     0  7FFF0000 11111111  11111111 11111111  *"...............*
0010    16  11111111 11111111  11111111 11111111  *................*
           一条或多条线与上一条线相同                 
7FF0 32752  11111111 11111111  11111111 111111    *............... *
开头的4个字节是RDW(记录描述符字); 7FFF是记录长度32767。物理记录是-
码:
***记录1                                                       
                                                                   
0000     0  10000000 0FFC0100  11111111 11111111  *................*
0010    16  11111111 11111111  11111111 11111111  *................*
           一条或多条线与上一条线相同                 
0FF0  4080  11111111 11111111  11111111 11111111  *................*
                                                                   
***记录2                                                       
                                                                   
0000     0  10000000 0FFC0300  11111111 11111111  *................*
0010    16  11111111 11111111  11111111 11111111  *................*
           一条或多条线与上一条线相同                 
0FF0  4080  11111111 11111111  11111111 11111111  *................*

...

***记录9                                                       
                                                                   
0000     0  00430000 003F0200  11111111 11111111  *................*
0010    16  11111111 11111111  11111111 11111111  *................*
           一条或多条线与上一条线相同                 
0040    64  111111                                *...             *

10000000是BDW(块描述符字)1000,当然是4096,记录中的字节数。

记录1中的0FFC0100被正确地称为段描述符字(SDW)。01是代码,表示它是较长逻辑记录的第一段。

记录2中的0FFC0300是SDW,表示该段是生成记录的中间段。

记录9中的003F0200是SDW,表示该段包含63个字节,并且是最后一个段。

BDW和SDW数据是开销,但是说它们被浪费或无用不是事实。
回到顶部
查看用户资料 发送私信
srajendran2

新的用户


已加入:2008年5月13日
帖子:56
地点:钦奈

发布发表:星期五六月01,2018 7:59下午
引用回复

感谢大家的答复。

不用在JCL和COBOL中将VBS更改为VB,而是可以在创建VBS并将其复制到VB之后仅使用SORT吗?它会给出相同的结果吗?
回到顶部
查看用户资料 发送私信
srajendran2

新的用户


已加入:2008年5月13日
帖子:56
地点:钦奈

发布发表:星期五六月01,2018 8:52下午
引用回复

我认为我们无法直接将VBS转换为VB,因为记录范围很广。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表:星期五六月01,2018 10:20下午
引用回复

srajendran2写道:
我认为我们无法直接将VBS转换为VB,因为记录范围很广。
否。只要输出LRECL为>=与输入LRECL相比,IEBGENER或类似实用程序应该没有问题。实际上,只要最长的输入记录是<=输出LRECL应该没问题。
回到顶部
查看用户资料 发送私信
马索

REXX主持人


已加入:2006年3月13日
帖子:1348
地点:以色列

发布发表:星期日六月03,2018 2:19下午
引用回复

srajendran2写道:
不用在JCL和COBOL中将VBS更改为VB,而是可以在创建VBS并将其复制到VB之后仅使用SORT吗?它会给出相同的结果吗?

至少可以这样说,这是不明智的:您将花费宝贵的CPU时间而不花钱,并且(超过)该文件所需的磁盘空间的两倍。

只需更新您的程序和JCL。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表:星期日六月03,2018 7:39下午
引用回复

马索写道:
srajendran2写道:
不用在JCL和COBOL中将VBS更改为VB,而是可以在创建VBS并将其复制到VB之后仅使用SORT吗?它会给出相同的结果吗?

至少可以这样说,这是不明智的:您将花费宝贵的CPU时间而不花钱,并且(超过)该文件所需的磁盘空间的两倍。

只需更新您的程序和JCL。
估计数据集的大小增加比Marso认为的困难得多。如前所述,BLKSIZE不适合3390。更合适的BLKSIZE(例如27998)可能会使数据集大小减少40%。转换为VB的问题是逻辑记录长度的实际分配。我们不知道。我怀疑srajendran2知道这一点。我们所知道的是定义的LRECL,它指定了 最大 可能的记录长度。在实际的VB或VBS数据集中,实际的最大记录长度通常远小于最大长度。 srajendran2应该尽快确定 实际 数据集中的最大记录长度。实际上,今天最好!
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:星期日六月03,2018 10:02下午
引用回复

引用:
在实际的VB或VBS数据集中,实际的最大记录长度通常远小于最大记录长度
对于VB,这是正确的。但是,我已经使用了VBS数据集(顺便说一下,不是SMF),并且可以肯定地说(看过块长条形图),磁盘上的VBS数据集的每个块长都在4字节之内。 BLKSIZE值。当z / OS填充VBS数据集的块时,只要块中剩余5个或更多字节(SDW为4个字节,数据记录为至少1个字节),就会创建一个起始段。这个特定的项目有一段时间了,但是我无法想象VBS的行为会发生太大的变化。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:星期二六月05,2018 12:02上午
引用回复

更新:我已在我的z / OS 2.1系统上确认,带有RECFM = VBS,LRECL = 32760,BLKSIZE = 27998的SMF数据集除最后一个字节外,所有块的长度都在27994和27998字节之间。因此,自从我第一次观察时,VBS的行为就没有改变。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表:星期二六月05,2018 12:29上午
引用回复

VBS设计的目的是具有基本恒定长度的物理记录。 Sample先生只是说IBM成功了。

VBS是在IBM推出RPS(2305和3330)磁盘以提高原始System / 360磁盘相对令人失望的性能的同时出现的。固定长度记录最初被认为很重要,因此RPS计算将正确显示,因此VBS被视为重要(请参见脚注)。

正常的VB将具有可变长度的物理记录。差异取决于数据集中逻辑记录的特征。这没有错。

昨天我花了一些时间编写一个程序来报告此情况。通过该程序运行各种数据集,报告的物理记录之间的差异很小。然后我意识到我没有包括最后的身体记录!结果表明存在明显的尺寸差异。但是,那么,有人希望最后一个物理记录要比其他记录小,因此将其包括在样本中可能不是一个好主意。

--------

事实证明,这种RPS计算非常愚蠢。顺序数据集确定了下一条记录在读取记录时的RPS编号;它不需要计算任何东西。

仿真3390似乎忽略了setector命令,并且似乎使用read扇区命令返回了垃圾。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> 科宝程式设计

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将字段名称传递给COBOL程序 科宝程式设计 10
没有新帖 科宝性能调整 科宝程式设计 6
没有新帖 JCL用于替换Cobol中的代码 JCL和VSAM 7
没有新帖 科宝 VS SORT实用程序,用于文件格式... 科宝程式设计 6
没有新帖 在COBOL创建中进行XML解析"h... 科宝程式设计 0
搜索我们的论坛:


回到顶部