COBOL程序典型结构

一个典型的COBOL程序结构是:程序由许多‘部’组成,每个‘部’可以包含多个‘节’

COBOL PROGRAM (程序)

DIVISION(部)

SECTION(节)

PARAGRAPH(段)

SENTENCE(句子)

STATEMENT(语句)

整个COBOL程序由4个'部'(DIVISION)组成:

Identification Division 标识部 Environment Division 环境部 Data Division 数据部 Procedure Division 过程部

用一句话介绍这四个部:标志部提供作者和编译器信息;环境部提供程序运行的环境;数据部描述程序处理的绝大部分数据;过程部描述对数据部描述的数据的操作算法:

Identification Division(标识部)--主要是程序和作者名

IDENTIFICATION DIVISION.
PROGRAM-ID ...
more ...

提交JCL的4种方式

总结了下在主机上面提交JCL的四种方式:

1.用VIEW或者EDIT打开JOB,在命令行上输入SUBMIT或者SUB:

1

2.直接在JOB前面输入SUBMIT或者SUB,不用打开:

1

3.命令行模式下输入命令:

1

4.Q;ST进入SDSF,找到你最近run过的JOB,在它前面输入SJ,回车,输入SUB,提交job。

more ...

utility判断dataset是否为空的方法

下面介绍四种利用Utility的返回码来判断一个dataset或者member是否为空文件的方法:

1.利用IDCAMS

1

2.利用SORT(DFSORT/SYNCSORT)

1

3.利用ICETOOL(SYNCTOOL)

1

4.利用ISRSUPC

1
方法不止以上四种,还有利用REXX脚本也可以判断,只是不属于本文讨论的范围。

more ...

IBM Debug Tool使用

关于IBM DebugTool的一些介绍,请参照我的另一篇博文:<>,这里呢,我是想说说一般我们用IBM Debug Tool来调试PL/I或者COBOL程序的时候都有哪些命令或者说按键可以用,比如说设置断点,运行至断点处,监视变量值啊什么的这种一般不管什么程序的调试都会用到的知识。当然,这本身很简单,写在这里只是为了让新人更快的学会使用,基本上10分钟搞定的那种,这样就节省了大家的时间了。 先上个IBM DebugTool的截图: 1
可以看到,最上面一行显示了当前debug的程序名字PRGM002以及所用的语言PL/I,接着是命令行COMMAND,所有的调试命令都在这一行输入。然后是变量监视区域(MONITOR),源程序区(SOURCE)以及调试日志(LOG)区域。Debug Tool遵循“七上八下”原则,也就是F7向上翻页,F8向下翻页。

执行下一条语句

按 ...

more ...

IBM File Manager for z/os 续(一)

上一次我简单介绍了下大机平台上的一个强大的文件查看/编辑工具,这里我要介绍几个在用FileManager查看/编辑 QSAM顺序文件的时候的小技巧。 1 上图显示的是employee的信息文件,比较小,只有几条记录。但是一般在生产环境上,数据都有好几百万条,如果你很傻的直接FIND 关键字来查找,那么抛开CPU耗费不说,你自己也将耗费很长的一段时间来等待搜索结果出来,所以,看看这篇文章,学会几个*File Manager*的使用技巧还是有必要的(如果你没功夫去看IBM红宝书的话)。

1、只查找指定字段(Field)

例:只在ACCT字段查找关键字“IT”

命令: F IT #6 (可以把#6看成ACCT的别名)

例:只在ACCT字段和EP_NAME字段查找关键字"IT"

命令: F IT #6 #8

2、只查找指定几列 (Column)

例:只在第8至20列查找关键字"AN"

命令 ...

more ...

Debug Tool for z/OS

作为一个PL/I、COBOL程序猿,调试程序是必须的一项技能。这里我来说说大机上面的调试工具IBM的DebugTool,它支持的环境包括BATCH, TSO, CICS, DB2, DB2存储过程以及UNIX等等。

这篇我来说说如何设置让程序可以被Debug

首先,你必须在编译程序的时候需要选择以Debug模式编译,这个在changeman里面直接在编译的时候选个IBM Debug Tool="Y"就可以了。

接着,如果是BATCH的,就需要在JCL的PARM中指定TEST运行时的参数,通过VTAM接口来初始化debug模式,VTAM%后面跟着的是userid,就像这样: 1

是BATCH的话,你还要有一个Debug的session,这个可以参照我的另外一篇博文:<<登陆大型机——Aviva的介绍>>,只需注意在建debug session的时候destination的IP一般和普通大机的物理ip是不一样。填上正确的ip,然后用你的id登陆,这里我的id是IBMUSER,须跟上面设置的一样。
回到JCL这边,submit,那恭喜你,你就可以看到Debugtool的画面了: 1

但是,如果程序是ONLINE的话,一般我们用CICS上面的DTCN这个工具来debug的。这里我假设你已经在上面“首先”里面正确编译了一个ONLINE的程序PRGM002 (带debug编译选项的)。然后,你登陆CICS ...

more ...

IBM File Manager for z/os

IBM的File Manger 在大机平台上是非常强大的文件查看/编辑器,是一个强大的ISPF应用程序。这里先贴上一张IBM2011年最新的关于File Manger的结构图,我认为这张图很好地诠释了File Manager 的强大之处: 1
[图片来源于IBM官方网站,仅供学习交流之用]

参照上图,我这里要讲的是当中的第二块内容——File Manager for Z/OS,关于其它部分如File Manager for DB2,File Manager for IMSFile Manager for CICS,以后再说。(其实更主要是因为平常工作做我用for z/os用的多,db2和cics的用得少,不敢在这瞎说。)。基本的操作原理就不说了,我就说说我在平常工作当中的几个有用的小技巧好了。 以查看/编辑QSAM (sequential)的dataset为例,选项1是查看(View),选项2是编辑 ...

more ...

mainframe访问磁带(Tape)

大机上磁带(tape)一般用来存储大容量的数据的,可以降低成本。我们要访问tape中的数据的时候,一般的做法是用JCL将tape中的记录转存到直接存储访问设备(DASD)中再查看。 下图中,我们通过utility ICEMANIBMUSER.DNS.TAPE这个tape中的所有记录都转存到IBMUSER.TAPE.TO.DASD中,这样就能查看了。 1

不过,需要注意的是,tape里面的数据量一般都很大,所以更多时候我们再用的时候会指定读取的record的数目,比如这里我们指定读取100条: 1

甚至,你还可以用SORT中的语法筛选出你想要的条件。比如(1,4,EQ,'AAAA')这样子。

more ...

用ISRSUPC在PDS所有member中搜索指定字符串

在一个PDS中搜索名字叫做“snailgo”的member,可以在command line上输入命令mem snailgo即可。但是,如果想搜索整个PDS下所有的成员(Member)中指定字符串,有没有办法呢?答案是肯定的,我们可以用一个比较的utility ISRSUPC来实现,同样的,只需submit一个JCL。 1

这里,我们在PDS “IBMUSER.TEST.LIB.JCL”“IBMUSER.TEST.LIB.PROC”下的所有member中搜索字符串”SNAILGO”。参数为:PARM=(SRCHCMP,ANYC),其中SRCHCMP指定要搜索的字符串,ANYC表示ANY Case,即搜索任何符合的情况,要了解更详细的PARM的用法,可以参考IBM红宝书IBM manual ISPF/PDF Guide ...

more ...

新建空的GDG generation

有时候你不希望GDG的当前generation里面有数据,但GDG又不能没有generation,否则JCL会提示找不到dataset。这时候你可以用IBM的IEFBR14utility来生成一个空的generation。IEFBR14它实际上什么也不做的空程序,常常被我们用来生成空的FILE。不只是gdg,普通的dataset也可以生成。

1
submit,查看,空的generation G0001V00 就生成了:

1

more ...