1.9 编辑数据集——选项2
当从主选项菜单中选择选项2时,进入编辑显示屏(Edit Entry Panel),如图1.16所示。编辑(Edit)除了存储功能外,与查询(View)基本相似,因此可以存储被更改的数据集或作业,被编辑的文件放在临时的内存区中。数据集的指定方法跟上面的浏览部分完全一样。
图1.16 编辑显示屏
当没有指定任何成员名时,系统就会显示所选数据集的成员列表,然后你就可以选择你要编辑的成员,系统会将选定成员的内容显示出来,如图1.17所示。
图1.17 所选定的编辑成员的内容
编辑界面的几点说明。
● 编辑区域包括6位行命令域(在界面的左边)和72位数据域。
● 行命令域的序号可以用命令(UNNUM/NUM OFF/RENUM)修改。
● 正在编辑的当前行的强调显示(如在行序号栏中是红色的)。
● 用空格表示不能显示的文字
1.9.1 常用的行命令
行命令只能在编辑区域的6位行命令域中输入,可以使用的行命令如下所列。对于主机可用命令,不分大小写。
● I——插入空行,I[n]插入n行,n是空行的行数。
● D——删除行,D[n]删除n行,n是要删除的行数,DD是块命令,必须成对出现,指定要删除的区域。
● R——重复行,R[n]将当前行重复n次,n是要重复的行数,RR是块命令,必须成对出现,指定要重复的区域。
● C——行复制,C[n]复制n行,n是要复制的行数,CC是块命令,必须成对出现,指定要复制的区域。C命令必须与基本命令COPY/CREATE/MOVE或者行命令A/B/O一起使用。
● M——行移动,M[n]移动n行,n是要移动的行数,MM是块命令,必须成对出现,用来指定要移动的区域。M命令必须与行命令A/B/O一起使用。
● A——指定COPY/MOVE的目的行的位置,在A(After)指定的行后插入,A[n]表示要插入n次,n是要插入的次数。
● B——指定COPY/MOVE的目的行的位置,在B(Before)指定的行前插入,B[n]表示要插入n次,n指定要插入的次数。
● O——行覆盖,必须与行命令C(Copy)/M(Move)一起使用,OO是块命令,必须成对出现,指定要覆盖的区域。注意,仅在目的行的空位置上覆盖原行的DATA,目标行如果是非空格字符,则内容不变。
● (——左移位(破坏性),([n]表示向左移n列,n的默认值是2,指定要左移的列数,((..((n是块命令,必须成对出现,指定要左移n列的行区域。
● )——右移位(破坏性),)[n]表示要右移的列数,))..))n是块命令,必须成对出现,n的默认值是2,指定要右移n列的行的区域。
● <——左移动(非破坏性),<[n]表示左移n列,n的默认值是2,<<..<<n是块命令,指定要左移n列的区域。注意,数据移动要受到边界(BOUNDS)值的限制。
● >——右移动(非破坏性),>[n]表示右移n列,n的默认值是2,>>..>>n是块命令,必须成对出现,指定要右移n列的区域。注意,数据移动要受到边界(BOUNDS)值的限制。
● X——行除外,隐藏多行数据,并用一标识行来表示,X[n]隐藏n行,n指定要隐藏的行数,XX是块命令,必须成对出现,指定要隐藏的行的范围。注意,在行排除的标识行上,可以使用D/C/M行命令;如果在基本命令行上,使用DEL X ALL命令,当前文件中的所有标识行除外的行都被删除,请参考DEL X..基本命令。
● S——行除外的隐藏行的重新显示,S[n]重新显示n行,n指定要显示的行数。
● F——行除外的隐藏行的最初行的重新显示,F[n]从初始行开始重新显示n行,n指定从开始行要重新显示的行数。
● L——行除外的隐藏行的最后行的重新显示,L[n]从最后行开始重新显示n行,n指定从最后行开始要显示的行数。
● COLS——列位置标识行,该命令在当前行加上列的位置标识。COLS行命令用来显示每行的纵向坐标,纵向坐标包含数据集或作业流所有列数的编号,当需要设定表或分界线时,此纵向坐标是十分有用的。
● MASK——MASK定义,当使用i行命令时,可以包含插入数据集或成员中的数据,此行不能作为数据集或成员内容的一部分存储起来。
● BOUNDS——定义行的边界列,边界值控制数据集或者成员中的哪些数据可以接受其他行命令或基本命令或宏(MACRO)命令的影响。(影响[>|<]行命令)。
● TABS——TAB的控制(用于快速移动游标),在基本命令行上,可以使用TABS ON/OFF。
● TE/TF/TS/LC/UC——文本处理命令。
● EDIT命令——重新开始一个编辑界面去编辑新的成员。
1.9.2 常用的行命令(COMMAND)的例子
图1.18显示的是成员CBLCICS编辑前的初始状态。
图1.18 成员CBLCICS编辑前的初始状态
图1.18是执行R命令之前的内容。这时,我们在第6行的行序号区域输入行命令R3,如图1.19所示。
图1.19 成员CBLCICS输入命令R3时的状态
按下Enter键后,这时,我们从图1.20就可以看到,原来第6行的内容就重复了3次,即文件中增加了3行一样的内容。
下面我们再看看重复(R)命令的块命令RR是如何工作的,现在,我们第9行和第13行的行顺序区分别输入块命令RR,表示要重复从第9行到第13行之间的内容,如图1.21所示。
图1.20 执行完重复命令(R3)后的状态
图1.21 重复命令的块命令的用法
按下Enter键后,文件中的内容就发生了变化。我们看到,原来第9行到第13行中的内容,重复出现在第14行到第18行,如图1.22中方框所示的区域,图1.22显示的是命令执行后文件的内容。
图1.22 块重复命令(RR)执行后的结果
下面我们看看删除(D)行命令是如何工作的,跟上面的重复(R)命令一样,它既可以单独使用,也可以成块使用。在图1.23中,我们在第14行输入命令D2。
图1.23 删除(D)命令的示意图
命令执行完后,原来的第14行和第15行的内容就消失,即被删除掉了,图1.24显示的是删除(D2)命令执行后的结果。
图1.24 删除(D2)命令执行后的结果
现在再来看看复制(C)命令的用法,复制命令必须与行命令A/B/O一起使用,以指定所复制的行要存放的目的地位置。我们在第9行输入命令C3,表示要复制3行,而在第15行则输入命令A表示复制的目的地在第15行之后,命令执行前的界面如图1.25所示。
命令执行完后,我们看到,原来的第9行到第11行共3行的内容现在出现在了第16行到第18行,也就是说,原来从第9行开始的3行内容被复制到了第15行之后,即出现在第16行到第18行。你应该还记得,我们在第15行输入的行命令是A,表示目的行在第15行之后。命令执行完后的结果如图1.26所示。
下面我们看看复制(C)命令的块(CC)命令是如何工作的。图1.27显示的是命令执行前的状态,我们在第20行和第22行分别输入块命令(CC),表明要复制的区域位于第20行到第22行。我们在第24行输入命令(A2)表示所复制的行的目的地位于第24行的后面,而且要复制两次。
图1.25 复制(C)命令的示意图
图1.26 复制(C)命令执行后的结果
图1.27 块复制(CC)命令的示意图
图1.28显示的是CC和A2命令执行后的结果,我们可以看到,原来在第20行到第22行中的内容,现在复制到了第25行到第27行及第28行到第30行,即复制了两次,这就是行命令A2的功劳。
图1.28 块复制命令执行后的结果
在前面我们列出了所有的行命令,限于篇幅,我们不可能演示每一个行命令的用法,相信通过上面几个例子,读者能够了解它们的基本用法。对于没有演示的命令,只要读者到你的TSO环境中试一试,就能很快明白它们的含义了。
1.9.3 基本命令及例子
基本命令的操作对象是编辑中的所有数据行,常用的基本命令介绍如下。
1.9.3.1 FIND/F——检索字符,功能键PF5/17=重新查找(REFIND)
下面是FIND命令的一个例子,在命令栏我们输入命令F SYSIN,目的是要查找文件中的字符串SYSIN,命令执行前的界面如图1.29所示。
图1.29 检索字符(FIND)命令的示意图
命令执行完后,所有有字符串SYSIN的行都以高亮的形式显示出来了,命令执行后的结果图1.30所示。
图1.30 检索字符(FIND)命令执行后的结果
图1.31中演示的命令也是执行查找功能的,查找的字符串为test。请注意,在命令F TEST之后的短语ALL X和在第1行的行序号区域的X99999,表示在查找到字符串test后只显示带有字符串test的行而将其他的行全面隐藏起来,这就是ALL X和X99999达到的效果。读者应该知道,X99999表示隐藏99999行,如果你的文件中没有99999行,则表示隐藏文件中的所有行。
图1.31 检索字符(FIND)命令与排除(X)命令结合使用的示意图
命令执行完后,所有带有字符串test的行都显示出来,而其他的行则隐藏起来。结果如图1.32所示。
1.9.3.2 CHANGE/C——改变指定字符串数据的内容
命令格式为:C string_1 string_2 [NEXT/ALL/FIRST/LAST/PREV] [CHARS/PREFIX/SUFFIX/WORD] [X/NX] [col_1 col_2],功能键PF6/18=重复修改(RECHANGE)
图1.33中的命令用来将字符串‘PRINT DD’修改为字符串‘LIB DD’。这里演示了字符串中间带有空格时命令的使用方法,即必须将字符串用引号(‘’)括起来。命令中的ALL表示要修改文件中所有满足条件的字符串。同理,NEXT表示修改下一个满足条件的字符串(从当前光标所在行开始向下找);FIRST表示文件中的第1个满足条件的字符串;LAST表示文件中最后一个满足条件的字符串;PREV跟NEXT正好相反,往回找满足条件的字符串(也是从当前光标所在的行开始)。而col_1和col_2指定查找的列的范围,即不是查找整行。
图1.32 检索字符(FIND)命令与排除(X)命令结合使用后的结果
图1.33 修改字符串命令(C)的用法示意图
命令执行后的结果如图1.34所示,我们看到所有修改过的行都在行序号区域显示为==CHG>。
1.9.3.3 EXCLUDE/X——不显示与检索条件一致的行
排除(EXCLUDE)命令的格式为:EXCLUDE string [NEXT/ALL/FIRST/LAST/PREV],[CHARS/PREFIX/SUFFIX/WORD] [X/NX] [col_1 col_2]。
图1.35中的命令用来隐藏(排除)所有在第1行到第10行之间带有字符串TRN的行,ALL表示对文件中的所有行操作,而WORD则要求查找的是单词。什么是单词,在下面的例子中,第7行到第10行的TRN是单词,但第11行的第1个TRN不是单词,因为是TRNS,而第11行后面的TRN虽然是单词,但它不在第1行到第10行的范围内,因此命令执行后第11行不会隐藏起来。
图1.34 修改字符串命令(C)执行后的结果
图1.35 排除(EXCLUDE)命令的使用示意图
图1.36是EXCLUDE命令执行后的结果,有了上面的解释,你应该不难理解为什么有的行隐藏起来,有的则没有。
图1.36 排除(EXCLUDE)命令执行后的结果
1.9.3.4 COPY/MOVE——从其他文件复制和移动数据到正在编辑的文件
命令格式为:COPY/MOVE [member] [AFTER label|BEFORE label],必须与行命令A/B一起使用;不指定成员名的话,系统将显示一个可以指定成员或者数据集界面供你指定成员名。
图1.37所示的例子用来将成员JOBCARD中的内容复制到第2行的后面。请注意命令行的命令COPY JOBCARD和第2行行序号区的命令A。
图1.37 复制(COPY)命令使用的示意图
命令执行完后的结果如图1.38 所示,从中我们看到,在第2 行的后面多了一行,这就是从成员JOBCARD中复制过来的。如果要复制的成员跟你目前正在编辑的文件不在同一个分区数据集中,比如在IBMUSER.TEST.COBOL中,你就不能直接使用COPY JOBCARD命令,而要先使用COPY命令并在系统提示的界面中输入目的文件所在的数据集,比如IBMUSER.TEST.COBOL,然后再选择成员JOBCARD就可以了,相信读者自己可以很容易知道它们的使用方法,我们这里就不做演示了。
图1.38 复制(COPY)命令执行后的结果
1.9.3.5 CUT/PASTE——剪切(CUT)和粘贴(PASTE)数据
CUT/PASTE命令用来从一个成员或数据集中复制几行到另一个成员或数据集中。被复制的区域的开始行和结束行以CC标识,然后在命令行输入CUT命令;再切换到目标成员或数据集显示屏中,在想要插入的行前缀区域内输入a或b,再在命令行输入PASTE命令,按Enter键。
下面是CUT和PASTE命令的例子。首先在我们正在编辑的成员(这里是IBMUSER.TEST.JCL(REPRO))中找到要剪切的内容,并用行复制命令(C)将要复制的内容标注出来,比如在图1.39中我们使用块命令(CC)将第7行到第12行的内容括起来,表示要将这几行的内容剪切下来,然后在命令行输入CUT命令,按下Enter键后,这几行的内容就会复制到剪贴板中。
图1.39 剪切(CUT)命令的使用示意图
现在,找到需要剪贴内容的目的地成员并进入编辑界面,如图1.40 所示的IBMUSER.TEST.JCL(CBLCICS),在命令行输入PASTE并在目的地行(如图1.40中的第10行)输入行命令(A或B),按下Enter键就可以将剪贴板中的内容复制到现在正在编辑的目的成员中来了。命令执行前的界面如图1.40所示。
图1.40 粘贴(PASTE)命令的使用示意图
图1.41显示的是PASTE命令执行完后的结果,我们可以看到,从IBMUSER.TEST.JCL(REPRO)中剪切的几行内容已经出现在我们的目的数据集IBMUSER.TEST.JCL(CBLCICS)的第11行到第16行了。
图1.41 剪切和粘贴(CUT/PASTE)命令执行后的结果
1.9.3.6 CREATE/REPLACE——数据文件的建立和替换
命令格式为:CREATE/REPLACE [member] [label_1 label_2],不使用[label_1 label_2]时,必须与行命令Cn或CC..CC一起使用。
下面的例子说明CREATE命令的用法。CREATE命令用来新建一个数据集成员,比如,在下面的例子中,我们要新建的成员的名字是NEWMEM,至于新成员的内容则由后面的标号区域来定义。一般来讲,在编辑界面中,最左边的行序号区域都只有序号,都是数字的。为了建立一个新成员,我们可以在序号区为需要的行定义标号,标号由句号(.)开始,接着是标号的名字,如图1.42中的(.START和.END)都是标号。这样,我们就可以在命令行引用它们以说明要复制的区域,同样的功能也可以通过我们前面使用的行命令(CC)来做到,效果是一样的。
图1.42 建立(CREATE)命令的使用示意图
在按下Enter键后,CREATE命令就执行了。图1.43显示的是命令执行后的界面,我们看到,右上角的信息(member NEWMEM created)告诉我们,新成员NEWMEM建立成功了。
图1.43 建立(CREATE)命令执行后的系统提示信息
图1.44显示的是CREATE命令建立的新成员NEWMEM的内容,它们与我们指定的区域中的内容是完全一样的。
图1.44 建立(CREATE)命令建立的新成员NEWMEN的内容
下面我们来说明REPLACE命令的用法。它跟CREATE命令基本是一样的,不同的是CREATE建立一个新成员,而REPLACE则是置换已有的成员。在图1.45所示的例子中,我们仍然以前面新建立的成员NEWMEM为例。使用的命令为replace newmem,有人可能注意到了,我们这次没有使用标号而是在序号为000100和000500的两行输入了行命令(CC),它们的效果与使用标号是一样的,都是指定要复制到被置换的成员中的内容。
按下Enter键后,系统出现图1.46所示的确认界面,你可以按下Enter键继续置换,也可以输入END命令返回到原来的编辑界面。
按下Enter键后,系统就显示图1.47所示的提示界面,右上角的信息(member NEWMEM replaced)告诉我们,成员NEWMEM中的内容置换成功了。
图1.45 置换(REPLACE)命令使用示意图
图1.46 置换(REPLACE)确认界面
图1.47 置换(REPLACE)命令执行后的提示信息
现在我们再来看看NEWMEM的内容,会发现,它的内容确实变成了我们用行命令(CC)指定的区域中的内容。图1.48显示的是NEWMEM的新内容。
图1.48 成员NEWMEM的新内容
1.9.3.7 RESET——重置(RESET)编辑界面中的各种数据显示
该命令的功能是将各种命令引起的编辑界面的变化恢复到正常状态。命令格式为:RESET [CHANGE/COMMAND/ ERROR/EXCULDED/LABEL/SPECIAL][label_1 label_2],该命令后面的选项的含义为:CHANGE为从行序号区域删除==CHG>标志;COMMAND为从行命令序号栏删除保留的行命令;ERROR为从行序号区删除==ERR>标志;EXCLUDED为重新显示被隐藏的行;LABEL为删除行序号区域中的标号(LABEL);SPECIAL为从编辑区域删除下面的临时行,如.=BNDS>,.=COLS>,.======,.=MASK>,.==MSG>,.=NOTE=,.=PROF>和.=TABS>等。
标志行是在行命令区域内高亮度显示行,它们可被分为以下几种类型。
● Changed Lines==CHG>:显示将被CHANGE或RCHANGE命令修改的行。
● Error Lines==ERR>:显示当输入一个行命令、主命令或宏命令时,由PDF发现的错误。例如,当输入一个CHANGE命令时,而此行却没有足够的空间用于修改。
● 特殊行,按类别可分为下面两种。
✧ 编辑文档行(存储在编辑文档中的值)。
=PROF>:包含独立的编辑模式配置,此行不能作为数据集或作业流的一部分存储起来。
=TABS>:跳格键的位置,此行不能作为数据集或作业流的一部分存储起来。
=MASK>:当使用i行命令时,可以包含插入数据集或作业流中的数据,此行不能作为数据集或作业流的一部分存储起来。
=BNDS>:设定左右界限,将被其他命令使用,此行不能作为数据集或作业流的一部分存储起来。
=COLS>:显示纵向坐标,如果使用MD(设定数据行)行命令把此行转换为数据行,此纵向坐标可以作为数据集或作业流的一部分存储起来。
✧ 信息、摘要、资料行。
==MSG>:信息行告知用户需修改编辑文档,修改的起因是编辑数据与编辑文档的设定发生了冲突。信息行不能作为数据集或作业流的一部分存储起来,除非使用MD(设定数据行)行命令将其转换成数据行。
=NOTE=:当插入编辑模式时,摘要行显示有关的信息,可是,如果编辑文档被设定为NOTE OFF,这些行将不出现在屏幕中。摘要行不能作为数据集或作业流的一部分存储起来,除非使用MD(设定数据行)行命令将其转换成数据行。
======:临时信息行,用来增加临时信息内容,不能同数据存储在一起。临时信息行不能作为数据集或作业流的一部分被存储起来,除非使用MD(设定数据行)行命令将其转换成数据行。
现在我们来看看RESET命令的功能。图1.49显示大家在前面就比较熟悉的界面,我们可以看到,第6行和第10行的序号栏变成了==CHG>,而不是我们常见的序号,你应已经知道。这时由于执行了CHANGE命令产生变化,同样,第13行开始的4行现在隐藏起来了,这是由于FIND或EXCLUDE命令引起的。目前看到的界面比较混乱,如果我们想回到初始的编辑界面,就要使用我们这里介绍的RESET命令。
图1.49 使用重置(RESET)命令之前的状态
现在,我们在命令行输入了RES(RESET命令的缩写)命令,如图1.50所示。
图1.50 重置(RESET)命令的使用示意图
按下Enter键后,编辑界面就回到了我们期望的初始状态了。图1.51是执行完RESET命令后的显示结果。
1.9.3.8 HEX——十六进制数显示
该命令的格式为:HEX[ON DATA/ON VERT/OFF]。
图1.51 重置(RESET)命令执行后的结果
现在我们来看看如何使用HEX命令查看数据文件中的不可显示字符的。在图1.52中,我们要查看的数据文件是IBMUSER.TEST.BKMASTN,我们会在本书的COBOL平衡线算法部分介绍它的记录格式。从图中我们可以看到,最右边的方框中是不可显示的字符或所谓的乱码,它真的是乱码吗?答案是否定的。在我们的数据文件中,为了提高计算速度和减少占用的存储空间,我们通常会使用压缩十进制的方式来存储金额或余额字段,这样存储的字段如果使用不同的方法,看到的就是乱码。为了能看清这种字段的真正内容,我们必须使用这里介绍的HEX命令。
图1.52 要查看的数据文件的内容(含有不可显示字符)
在图1.53中,我们在命令栏输入了命令HEX ON,目的是要求系统将正在编辑的文件以十六进制代码的方式显示出来。
按下Enter键后,原来每行的内容现在变成了3行,如图1.54所示,第1行依然按照字符来显示,接下来的两行则显示每个字符对应的十六进制代码。比如,下画线(_)对应的十六进制(EBCDIC)代码为60,数字3的代码为F3等。现在再回过头看看原先所谓的乱码,我们看到第1行方框内的十六进制代码为000000000395369C,等你学完了后面的COBOL数据描述格式后,你就知道它表达的余额是3953.69,即三千九百五十三元六角九分。
图1.53 十六进制数显示(HEX)命令的使用示意图
图1.54 十六进制数显示(HEX)命令执行后的结果
如果你想从现在的十六进制数显示形式回到普通的字符显示格式,就可以像图1.55所示的那样输入命令HEX OFF。
图1.55 停止十六进制数显示(HEX OFF)命令使用示意图
按下Enter键后,界面又重新回到熟悉的字符显示屏幕,如图1.56所示。
图1.56 不显示十六进制数字的文件显示格式
显示十六进制数据的方法有两种,一种是如下面左边所示的,按照垂直的方式显示字符,比如,字符A对应的代码为C1、B为C2、C为C3等;另一种是按照水平方式排列,同样的数据在右边的排列就不同了。下面显示的是同一组数据按照两种不同的排列方式排列后的结果。
字符代码按垂直方向排列
---------------------------------- ABCDEF -0123456 CCCCCC464FFFFFFF4444444444444444 12345600001234560000000000000000 ----------------------------------
字符代码按水平方向排列
---------------------------------- ABCDEF -0123456 C1C2C3C4C5C6406040F0F1F2F3F4F5F6 40404040404040404040404040404040 ----------------------------------
1.9.3.9 SORT——数据排序
SORT命令的格式为:SORT [label_1 label_2] [X|NX] [sort_field1 ..sort_field5]或sort_field*:[A|D] start_col end_col。注意:排序的域不能重叠。
下面的例子说明SORT命令的效果。在图1.57中,我们正在编辑的文本是完全没有排序的,如果你希望你的文本按照字符的顺序排列(老实讲,我不知道什么时候需要对程序或作业流排序),就可以像图1.57那样输入SORT命令。
图1.57 数据排序(SORT)命令使用示意图
按下Enter键后,我们看到,原来的文本已经按照字符的顺序排列好了,如图1.58所示。
图1.58 排序(SORT)命令的执行结果
1.9.3.10 SUBMIT——使用TSO SUBMIT命令执行JOB
SUBMIT是我们今后经常要使用的命令,用来将编写好的作业流(JCL)提交到系统中执行。比如,在下面的例子中,正在编辑的成员COMPB是一个COBOL程序编译作业流,用来编译程序BKUPD3。现在我们如图1.59所示的那样,在命令行输入SUB(SUBMIT的简写),就可以让系统帮我们编译程序了。
图1.59 提交(SUBMIT)命令使用示意图
按下Enter键后,系统就会在左下角显示所提交作业的信息,如图1.60 所示,提交的作业名为ISMUSERC,作业ID为JOB00037等。
1.9.3.11 EDIT——编辑其他的数据文件
编辑(EDIT)命令的格式为:EDIT[member]。
EDIT命令可以让你同时编辑几个文件,比如,现在正在编辑的成员是COMPB,而你又想在不结束对COMPB编辑的情况下,同时编辑成员CBLCICS,就可以像图1.61显示的那样,直接在命令行输入EDIT CBLCICS。
图1.60 作业提交(SUBMIT)后的系统提示信息
图1.61 编辑(EDIT)命令的使用示意图
按下Enter键后,CBLCICS的内容就像图1.62所示的那样,显示在你的面前,供你编辑了。
图1.62 可供你编辑的新成员的内容
1.9.3.12 START——建立新的会话
START命令的格式为:START。当你同时有多个会话在工作时,可以使用功能键PF9在多个会话之间切换。PF9功能键切换的格式为:PF9[n]:进入第n个操作会话。如果你想从当前的会话中退出,可以在命令行输入命令=X,系统就会退出当前工作的会话。如果想在同一个屏幕上显示两个会话,就可以使用功能键PF2分隔屏幕。
下面我们来看看START命令及功能键PF2和PF9的使用方法。当你想新建立一个会话时,可以如图1.63所示的那样,在命令栏输入START命令。
图1.63 建立新的会话(START)命令的使用示意图
按下Enter键后,系统就会显示一个新的会话给你,如图1.64所示。这样,你就已经有了两个会话,一个是原来的编辑界面,另一个就是刚刚START的新会话。实际上,系统会根据你建立会话的先后顺序为每个会话编号,这样,会话1是开始的编辑界面,会话2就是我们刚刚打开的新界面。
图1.64 新的会话的菜单
如果你想将目前的两个界面在同一个屏幕上显示,就可以使用功能键PF2。当你按下PF2功能键后,如图1.65所示,你目前所拥有的两个界面已经分别显示在同一个屏幕的上下两部分了。
图1.65 使用PF2功能键在同一屏幕上显示两个会话界面
你可以使用功能键PF9在同一个屏幕的两个会话之间切换,比如,当你按下功能键PF9后,光标会从屏幕的上部(会话2)跳到屏幕的下面(会话1),如图1.66所示。
图1.66 使用功能键PF9切换界面后的结果
如果两个会话还不够你用(对许多程序员来说,两个会话确实不够用),你可以像图1.67显示的那样使用START命令再建立一个会话,不过这次的START命令后面多了一个数字2,难道是一次建立两个会话?不是的,这里使用的是系统提供的命令组合功能,即可以将多个命令一次输入。命令START 2表示先执行命令START建立一个新会话,然后,在该新会话上执行功能2。功能2是什么?看一看你的TSO初始界面你就会知道,选项2是编辑(EDIT)。
当按下Enter键后,一个新的编辑会话(会话3)就出现在屏幕的上部了,而原来待在屏幕上部的会话2则会消失,如图1.68所示。
如果我们希望会话2重新出现在我们的屏幕上,就要用到功能键PF9。在使用PF9功能键之前,必须指定你希望显示的会话的编号,如图1.69所示。我们首先在命令行输入数字2,表示我们希望对会话2进行如下操作。
图1.67 建立新的会话(START)命令使用示意图
图1.68 建立新的会话(START)命令执行后的结果
图1.69 界面切换功能键PF9使用示意图
按下功能键PF9后,会话2就像图1.70显示的那样,如期出现在我们的屏幕上了。
图1.70 界面切换功能键PF9执行后的结果
1.9.3.13 终止编辑会话
如果你想停止当前的编辑工作,你可以使用下面的3个选项结束你的编辑。
● END:退出编辑会话,根据下面介绍的PROFILE中AUTOSAVE的设定进行一些相应的处理,包括是否保存数据等,提出会话。
● SAVE:不终止编辑会话只保存数据。
● CANCEL:终止编辑会话,不保存对数据所做的修改。
1.9.3.14 附加的基本命令
除了上面列出的基本命令外,系统还提供了下列常用命令。
● 定位(LOCATE)——显示数据中的特定行,LOCATE命令允许上下移动光标,把所选行作为第1行来显示。
● 启动编号(RENUM)——把NUMBER模式设置为ON并对数据重新编号,RENUM触发NUMBER模式,对所有的行进行重新编号,通常以100的增量增加。
● 关闭编号(UNNUM)——把NUMBER模式设置为OFF并取消顺序号,UNNUMBER关闭所有顺序号,使NUMBER模式处于off状态,行数1是显示的第1行。
● 作废(UNDO)——取消上一命令的修改,如果在编辑中输入了错误的行、宏命令、错误的数据,可以利用UNDO命令把数据恢复到修改前的状态。使用UNDO命令,PROFILE中的选项必须为RECOVERY ON。
● 恢复(RECOVERY)——取消修改内容自动恢复到原来的状态,专家强力推荐此命令。
● HIDE——在屏幕中隐藏n行记录,它们的信息没有在屏幕中出现。HIDE X HIDE命令主要用来隐藏n行记录,使这几条n行记录从显示屏中消失,而无任何提示信息,取而代之的是几行底线(如果终端支持底线的话),表示数据部分没有被显示出来。
● RESET HIDE——重新显示被HIDE命令隐藏起来的n行记录信息。RESET HIDE RESET命令的HIDE操作,重新显示被HIDE命令隐藏起来的n行记录。同样无任何提示信息。
1.9.4 TSO编辑配置文件(PROFILE)的控制和显示
PROFILE命令用来显示或修改现有TSO编辑配置文件的内容。命令的格式为PROFILE [name][number],其中,name指定配置文件的名字,number控制显示配置文件数据的行数。如果值为0时,PROFILE不显示;为5时,所有的PROFILE数据都显示。
你可以在命令行输入命令PROFILE,如图1.71所示。
图1.71 编辑配置文件(PROFILE)命令使用示意图
按下Enter键后,系统就会将当前PROFILE中的所有选项如图1.72白色部分所做的那样,显示出来。
图1.72 编辑配置文件(PROFILE)命令执行后的结果
每一个用户至少有一个编辑配置文件,它定义了用户编辑数据集的一些特性,例如,你可以设定文档使所有数据以大写字母编辑,或以混合字母方式编辑。
ISPF以数据集的库类型为基础生成一个默认编辑文档,通常默认文档适合数据集内的各类数据,但有时也不适合。编辑器自动记住当前文档内每一个模式的设定,例如你想把NUMBER OFF修改为NUMBER ON,你就是告诉编辑器开始产生顺序号,这样,编辑器自动记住这个NUMBER处在ON的模式,下一次编辑同一个文档时,NUMBER的模式就是ON。
当定义一个新文档时,使用默认值进行初始模式的设定,你可以接受默认值,也可以通过编辑命令修改它们,一旦修改了这些设置,编辑器会自动记住它们的修改。
所有的配置文件的内容是以白色显示在你编辑的文档前面的,在每一行的序号栏显示为=PROF>,你可以在命令行输入RESET命令或在配置文件的开始=PROF>处输入行命令D删除它们。配置文件显示的是一组文件的编辑属性,你可以使用对应的命令修改它们的模式。下面我们将你可能感兴趣的选择做一个讲解。
● 是否要自动恢复选项RECOVERY ON/OFF。
这个选项应该总是ON。如果不是ON,你在编辑时就不能使用UNDO命令撤销刚刚做的修改或删除动作。
● 序号显示选项NUMBER DISPLAY/ON/OFF STD。
序号用来标识数据行的顺序。NUMBER ON STD对PL/I程序是有用的。但是,当编辑信息(Messages)、CLists或REXX程序时,就需要将顺序号选项置为OFF。为了去掉序号,你可以在命令行输入命令:
Command ===> unnum。
然后按下Enter键,这样,就将编辑配置文件中的NUMBER选项修改为了NUMBER OFF,即序号不会出现在你编辑的文档中。
● 大小写切换选项CAPS ON/OFF。
当大小写切换选项为CAPS ON时,虽然你可以以各种方式输入比如全部小写、大小写混合或全部大写,但当你按下Enter键或按下PF3功能键保存你的文档时,所有输入的字符都会变成大写;但选项为CAPS OFF时,所输入的数据就会按照你输入的格式保存,不会自动转成大写。请注意,JCL要求全部大写,所以,对于JCL,使用CAPS ON选项较方便。
● 跳格键选项TABS ON/OFF。
如果你想编辑文档时使用跳格键,就要将该选项置成ON;如果不想使用,可以置成OFF。但是,当你编辑像COBOL这种要求语句出现在特定列的程序时,将跳格键置成TABS ON就是非常有用的。
● 自动保存选项AUTOSAVE ON/OFF。
第1次建立文档时将自动保存选项置成AUTOSAVE ON总是有好处的。老要重新编辑一个已经存在的文档,就不一定要置成ON。是置成ON或OFF完成取决于用户的喜好。对于作者,总是置成ON以避免无意间丢失编辑了半天的文档。
● 配置文件的锁定和解锁选项PROFILE LOCK/UNLOCK。
对于特定的文件,你可以将它的配置文件锁定以免被人修改。如果你想修改配置文件的选项,就必须使用命令PROFILE UNLOCK来解除配置文件的锁定。
● 强调显示选项HILITE OFF/ON FIND。
将强调显示选项置成HILITE ON可以在查找字符串时将找到的满足条件的字符串强调(高亮)显示。该选项一般都会置成HILITE ON。