[an error occurred while processing this directive]
Software  >  OpenVMS Systems > Documentation > 731final > 6489 > hanzi

HP OpenVMS Systems Documentation

Content starts here

OpenVMS �û��ֲ�


ǰҳ Ŀ¼ ����

14.16.5 ʹ�� GOTO ����

GOTO ����ѿ��ƴ��ݵ�����������еı���С�(�йر��ʹ�õ����飬������� 13 ����) GOTO ������ THEN �Ӿ����ر����ã���ʹ���̷�֧��ǰ��������磬��ʹ��������̵IJ���ʱ�������ڹ��̿�ʼ���Բ�������ת�Ƶ��ʵ��ı�š�

GOTO �� GOSUB �����Ŀ���Ų����� IF-THEN-ELSE �ṹ�򵥶��������г���֮�ڡ�

�����������У�IF ������ P1 ���ǿմ�:


$ IF P1 .NES. "" THEN GOTO OKAY
$ INQUIRE P1 "Enter file spec"
$ OKAY:
$ PRINT/COPIES=10 'P1'
   .
   .
   .

��� P1 �ǿմ����Ͳ�ִ�� GOTO ����� INQUIRE ������ʾ�������ֵ������GOTO ����ʹ�������ƹ� INQUIRE ������κ�һ������£��ù���ִ�и����б�� OKAY �� PRINT ���

������������ GOTO ����س�����Ϣ����Ϊ����Ŀ�� (TEST_1) �� IF-THEN �ṹ��:


$ GOTO TEST_1
$ EXIT
$ IF 1.EQ.1
$       THEN WRITE SYS$OUTPUT What are we doing here?"
$ TEST_1:
$       WRITE SYS$OUTPUT "Got to the label"
$ ENDIF
$ EXIT

14.16.5.1 ��������ִ��

��Ҳ����ʹ�� GOTO �����������ִ���ѳɹ���ɵIJ�����ҵ��Ҫ������һ�㣬ִ�����²���:

���� ����
1 �ڹ����д�һ����ſ�ʼÿ�����ܵĿ�ʼ�㡣
2 ��������֮��ʹ�� SET RESTART_VALUE = label-name �������õ������ŵ����������㡣

��ִ�� SET RESTART_VALUE = label-name ����֮�����������ҵ���жϣ���ô�������������������ҵʱ��ϵͳ���ʵ��ı������ֵ��ȫ�ַ��� BATCH$RESTART��

3 ��������̿�ʼ�����Է��� $RESTART ��ֵ��

��� $RESTART Ϊ�棬ִ��һ�� GOTO ��䲢��ʹ�÷��� BATCH$RESTART ��Ϊת�Ʊ�š�

$RESTART ȫ�ַ���

$RESTART ��ϵͳΪ��ά���ı���ȫ�ַ��š����һ��������ҵ�жϺ�������������ô $RESTART Ϊ�档����$RESTART Ϊ�١�����ɾ��������ȫ�ַ��� $RESTART��

������������ SET RESTART_VALUE ���������Ҫȫ������ִ�������ҵ�������� SET ENTRY/NOCHECKPOINT ����ɾ�����ȫ�ַ��� BATCH$RESTART�������������һ���жϵ���ҵ����ô�����ҵ�����жϵ�λ�ÿ�ʼִ�С�

����������չʾ���ʹ����������ҵ�е���������ֵ:


$ ! Set default to the directory containing
$ ! the file to be updated and sorted
$ SET DEFAULT DISK1:[ACCOUNTS.DATA84]
$
$ ! Check for restarting
$ IF $RESTART THEN GOTO 'BATCH$RESTART'
$
$ UPDATE_FILE:
$ SET RESTART_VALUE = UPDATE_FILE
   .
   .
   .
$ SORT_FILE:
$ SET RESTART_VALUE = SORT_FILE
   .
   .
   .
EXIT

Ҫ�������������ύΪһ����������������������ҵ����ô���ύ�����ҵʱ��Ϊ SUBMIT ����ʹ�� /RESTART �޶��ʡ���Ϊ�жϵ���ҵ���жϵ�λ�ÿ�ʼִ�У������ SORT_FILE ���г����ڼ���������ҵ�жϣ�����������ʱ���ʹӱ�� SORT_FILE ��ʼִ�С�

ϵͳʧ��ʱ������ά���󲿷ֽ��̻�������ϵͳʧ�ܺ�ά���ķ���ֻ�� $RESTART �� BATCH$RESTART�������Ӧ����ÿ�� SET RESTART_VALUE ����֮�������� $RESTART Ϊ��ͻ�ִ�е� THEN ������У����¶�����������������̵��κη��Ż�����߼������������ THEN ������ж�����ź��߼�������ô���� GOTO 'BATCH$RESTART' Ӧ���� THEN ������е����һ�����

14.16.6 ʹ�� GOSUB �� RETURN ����

����������� GOSUB ����ѿ��ƴ��ݵ���ŵ������г����������������������в����ڣ�������̲��ܼ���ִ�У����ұ�ǿ���˳���(�йر�ŵ�������Ϣ��������� 13 ����) ÿ�����̼�����Ƕ�� GOSUB ������� 16 �Ρ�

GOSUB �����Ǿֲ������г�����ã����������µĹ��̼�����ˣ��ڵ�ǰ����ж�������б�ź;ֲ����ſ����� GOSUB ���õ������г���

RETURN ������ֹ�����г��򣬲��ѿ��Ʒ��ص��� GOSUB ����֮������������ָ�� RETURN ����� $STATUS ֵ��ȡ�� DCL �������г������ʱ����� $STATUS ��ֵ�����ֵ������һ�� 0 �� 4 ֮�����������һ���ȼ۱���ʽ�����Ϊ $STATUS ָ��һ��ֵ��DCL �����ֵ����Ϊһ���������롣�����Ϊ $STATUS ָ��һ��ֵ����ͱ��� $STATUS �ĵ�ǰֵ��

��������չʾ���ʹ�� GOSUB ����ѿ��ƴ��ݵ������г���:


$!
$! GOSUB.COM
$!
$ SHOW TIME
$ GOSUB TEST1            (1)
$ WRITE SYS$OUTPUT "GOSUB level 1 has completed successfully."
$ SHOW TIME
$ EXIT
$!
$! TEST1 GOSUB definition
$!
$ TEST1:
$     WRITE SYS$OUTPUT "This is GOSUB level 1."
$     GOSUB TEST2       (2)
$     RETURN %X1        (3)
$!
$! TEST2 GOSUB definition
$!
$ TEST2:
$     WRITE SYS$OUTPUT "This is GOSUB level 2."
$     WAIT 00:00:02
$     RETURN            (4)

��������������ʱ��ע�����¼���:

  1. ��һ�� GOSUB ����ѿ��ƴ��ݵ����Ϊ TEST1 �������г���
  2. �������ִ���������г��� TEST1 �е����ת�Ƶ����Ϊ TEST2 �������г���
  3. �������г��� TEST1 �е� RETURN ����ѿ��Ʒ��ص���������̣����Ұ�ֵ 1 ���ݸ� $STATUS��ָ���ɹ���ɡ�
  4. �������г��� TEST2 �е� RETURN ����ѿ��Ʒ��ص������г��� TEST1��ע�⣬������������� 3 ֮ǰִ�С�

14.17 �����µ����

�����ַ����ɽ����µ����:

  • ��һ�����������ʹ��ִ�й��� (@) ������Ƕ��������̣��Ե�����һ��������� (���� 13 ������)��
  • ʹ�� CALL ������ô�������������е������г���

14.17.1 ʹ�� CALL ����

����������У�CALL ����ѿ��ƴ��ݵ���ŵ������г��򣬲������µĹ��̼���CALL �����������ڵ����ļ��б���һ�����ϵ����������̣��Ӷ�ʹ���̸����ڹ����������г����ű�����Ψһ�ģ�����������п��Է��� CALL ����֮ǰ��֮���� 13 ���������������г����ŵĹ���

�����֮�⣬�����Դ��ݶ��˸���ѡ�����������г����йز�����������Ϣ������� 14.2 ����

������ʹ�� CALL ����Ĺ���:

  • ��������͸� SYS$OUTPUT
  • ��һ����ѡ�� /OUTPUT �޶��ʣ�������������������г���ָ����һ���ļ�
  • ������ļ�ʹ��Ĭ���ļ����� .LIS
  • ����ļ�˵���в�����ͨ���

14.17.1.1 CALL �����Ĭ��ֵ

��������ʹ�� CALL ������صĸ���Ĭ��:

  • ����Ƕ�� CALL ������õ������г����ִ�й��� (@) ������õĹ��̣����ɴ� 32 �������
  • ����ʹ�� SET SYMBOL �������Σ����ⲿ������ľֲ����ſ������κ��ڲ��Ĺ��̻������г��򼶡��κ��������ȫ�ַ��š�
  • ���ֻ�ڶ������ǵ��������Ч��

14.17.1.2 ��ʼ�ͽ��������г���

SUBROUTINE �� ENDSUBROUTINE ����� CALL �����г���Ŀ�ʼ�ͽ������������� SUBROUTINE ����֮ǰ���������г������ڵ㡣�����԰� EXIT ��������� ENDSUBROUTINE ����֮ǰ�����Ƕ�����ֹ�����г����DZ���ġ�ENDSUBROUTINE ������ֹ�����г��򣬲��ѿ��ƴ��ݵ��� CALL ����֮��������С�

ֻ�������г��� CALL �������ʱ����ִ����������г����е������С���������̵�����ִ���ڼ䣬�������Խ��ͳ��������� SUBROUTINE �� ENDSUBROUTINE ����֮����������

��������Ӧ���ڶ��������г�����ڵ��������ͱ�����õ�ʹ��:

  • ����һ�������г����ж���������г�����ڵ�ֲ����Ǹ������г������һ�������г�����ڵ�����һ�������������г�����У���ô�Ͳ��ܵ�����������г���
  • ���һ�������г�����ڵ㶨λ�� IF-THEN-ELSE �飬�Ͳ��ܴ� IF-THEN-ELSE ����ⲿ������������г���
  • ÿ�� SUBROUTINE ���������ƥ��� ENDSUBROUTINE ������������г���

�����������У���Ϊ CALL BAR ������ MAIN �����г���֮�⣬������������Ч:


$ CALL BAR
$
$ MAIN: SUBROUTINE
$
$     BAR: SUBROUTINE
$     ENDSUBROUTINE
$
$ ENDSUBROUTINE

Ҫʹ��� CALL ���������ã������������ SUBROUTINE �� ENDSUBROUTINE ��֮�䡣

�����������չʾ�ĵ��ò���������Ϊ������ IF-THEN-ELSE ��֮��:


$ IF 1
$ THEN
$    BOB:SUBROUTINE
$    ENDSUBROUTINE
$ ENDIF
$ CALL BOB

�������Ӱ������������г��򣬳�Ϊ SUB1 �� SUB2��ֱ��ʹ�� CALL ����������ǣ���ִ����Щ�����г���


$
$! CALL.COM
$
$! Define subroutine SUB1.
$!
$ SUB1: SUBROUTINE
        .
        .
        .
$       CALL SUB2 !Invoke SUB2 from within SUB1.
        .
        .
        .
$       @FILE  !Invoke another command procedure file.
        .
        .
        .
$       EXIT
$ ENDSUBROUTINE !End of SUB1 definition.
$!
$! Define subroutine SUB2.
$!
$ SUB2: SUBROUTINE
$       EXIT
$ ENDSUBROUTINE !End of SUB2 definition.
$!
$! Start of main routine. At this point, both SUB1 and SUB2
$! have been defined but none of the previous commands have
$! been executed.
$!
$ START:
$       CALL/OUTPUT=NAMES.LOG  SUB1 "THIS IS P1"
        .
        .
        .
$       CALL SUB2 "THIS IS P1" "THIS IS P2"
        .
        .
        .
$ EXIT  !Exit this command procedure file.

CALL ������������г��� SUB1�����Ұ����ָ�����ļ� NAMES.LOG�������г��� SUB1 ���������г��� SUB2���������ִ�� SUB2��ʹ��ִ�й��� (@) �������������� FILE.COM���� SUB1 �е���������ִ�к����������е� CALL ����ڶ��ε��� SUB2��SUB2 ���ִ��ʱ��������̾��˳���

14.18 ��д Case ���

Case ���������ĸ�ʽ���������룬��һ���������ִ������һ������ȡ���ڱ��������ʽ��ֵ����ͨ����Case ������Чֵ��ÿ������鿪ʼ�ı�š�ʹ��ָ����ֵ��Ϊ GOTO ����Ŀ���ţ�Case ���ѿ��ƴ��ݵ��ʵ��Ĵ���顣

Ҫ��д Case ��䣬����:

  1. �г���š�
  2. ��д Case ��䡣
  3. ��д����顣

14.18.1 ����

Ҫ�г���ţ���ʹ���ŵ�ͬ��һ������һ����б�� (������ѡ������������κ��ַ�) ����ı�ŵ��ַ�����������Ŷ���Ӧ���������֮ǰ��

��������ʹ���� COMMAND_LIST ��ͬ�ڱ�� PURGE��DELETE �� EXIT:


$ COMMAND_LIST = "/PURGE/DELETE/EXIT/"

14.18.2 ��д Case ���

Ҫ��д Case ��䣬��ѭ�������:

���� ����
1 ʹ�� INQUIRE ������ Case ������ֵ��
2 ʹ�� IF ������ F$LOCATE �� F$LENGTH ȷ�� Case ������ֵ�Ƿ���Ч��
3 ��� Case ������Ч����ôִ����� Case ��� (�� GOTO ����) �ѿ��ƴ��ݵ��ʵ��Ĵ���顣

������ʾһ����Ϣ���˳�����������ͬ�� Case ֵ ��

�����������У���ŵ�������������������ˣ�F$LOCATE �Ѷ�������������������������У���ȷ������������д�ġ�


$GET_COMMAND:
$ INQUIRE COMMAND -
  "Command (EXIT,PURGE,DELETE)"
$ IF F$LOCATE ("/"+COMMAND+"/",COMMAND_LIST) .EQ. -
   F$LENGTH (COMMAND_LIST) THEN GOTO ERROR_1
$ GOTO 'COMMAND'
   .
   .
   .
$ERROR_1:
$ WRITE SYS$OUTPUT "No such command as ''COMMAND'."
$ GOTO GET_COMMAND

14.18.3 ������

ÿ��������ܰ���һ�����������Ψһ��ſ�ʼÿ������顣�ѿ��ƴ��ݵ������������֮��ı�Ŷ�����ÿ������顣

�����������У�ÿ�����ʼ��Ψһ��� (PURGE:��DELETE:)�����Ұѿ��ƴ��ݵ�һ���ڵ�ǰ�����֮��ı�� (GOTO GET_COMMAND) ������:


$GET_COMMAND:
   .
   .
   .
$PURGE:
$ INQUIRE FILE
$ PURGE 'FILE'
$ GOTO GET_COMMAND
$ !
$DELETE:
$ INQUIRE FILE
$ DELETE 'FILE'
$ GOTO GET_COMMAND
$ !
$EXIT:

14.19 ��дѭ��

�����Ա�д����������Ŀ�ʼ���Ա�����ѭ�� (���� 13 ������)��Ȼ������Ҳ���Ա�д��ѭ����ĩ�˲�����ֹ������ѭ����ͨ�������������:

���� ����
1 ��ʼѭ����
2 ִ��ѭ��������
3 ������ֹ������
4 ������ֹ������

������������㣬��ǰȥѭ���Ŀ�ʼ��

5 ����ѭ����

ע�⣬��ѭ��ĩ�˲�����ֹ����ʱ����ѭ�����е���������ִ��һ�Σ���������ֹ������ֵ��

�����������չʾ�����������ִ��һ���� COMMAND ���� "EX" (EXIT) ʱ����ֹ��ѭ����F$EXTRACT �� COMMAND �ض�Ϊ����ǰ�����ַ����ڵ�һ�������У���ѭ���Ŀ�ʼ������ֹ���� COMMAND���ڵڶ��������У���ѭ��ĩ�˲��ԡ�


$ ! EXAMPLE 1
$ !
$GET_COMMAND:
$ INQUIRE COMMAND-
  "Command (EXIT,DIRECTORY,TYPE,PURGE,DELETE,COPY)"
$ COMMAND = F$EXTRACT(0,2,COMMAND)
$ IF COMMAND .EQS. "EX" THEN GOTO END_LOOP
   .
   .
   .
$ GOTO GET_COMMAND
$END_LOOP:


$ ! EXAMPLE 2
$ !
$GET_COMMAND:
$ INQUIRE COMMAND-
  "Command (EXIT,DIRECTORY,TYPE,PURGE,DELETE,COPY)"
$ COMMAND = F$EXTRACT(0,2,COMMAND)
   .
   .
   .
$ IF COMMAND .NES. "EX" THEN GOTO GET_COMMAND
$ ! End of loop 

Ҫִ���ض�������ѭ����ʹ��һ����������Ϊ��ֹ�����������������У��û����� 10 ���ļ���������ֲ����� FIL1��FIL2��...��FIL10:


$ NUM = 1                       ! Set counter
$LOOP:                          ! Begin loop
$ INQUIRE FIL'NUM' "File"       ! Get file name
$ NUM = NUM + 1                 ! Update counter
$ IF NUM .LT. 11 THEN GOTO LOOP ! Test for termination
$END_LOOP:                      ! End loop
   .
   .
   .

��������ʹ��һ������������ѭ��ִ�еĴ��������ѭ��ִ�� 10 �Σ���ѭ��ĩ�˲�����ֹ����:


$! Obtain 10 file names and store them in the
$! symbols FILE_1 to FILE_10
$!
$ COUNT = 0
$ LOOP:
$    COUNT = COUNT + 1
$    INQUIRE FILE_'COUNT' "File"
$    IF COUNT .LT. 10 THEN GOTO LOOP
$!
$ PROCESS_FILES:
   .
   .
   .

���� COUNT ������¼��ѭ���������ִ�д�����COUNT Ҳ�������������� FILE_1��FILE_2���Դ������� FILE_10��ע�⣬COUNT ��ֵ��ѭ����ʼ����������ѭ��ĩ�˲��ԡ���ˣ��� COUNT �� 9 ���� 10 ʱ���� IF ��䷢�ּ�ֵ֮ǰִ�����һ��ѭ�� (��� FILE_10 ��ֵ)��

ҪΪ��֪˳���ִֵ��һ��ѭ����ʹ�� F$ELEMENT �ʷ�������F$ELEMENT �ʷ�������һ���ö�����ָ�����Ŀ�л����Ŀ���������ṩ��Ŀ������Ŀ�����������б���Ϊ F$ELEMENT �ı�Ԫ��

�й����ʹ�� F$ELEMENT �ʷ����������飬����� OpenVMS DCL Dictionary��

�����������У��ļ� CHAP1��CHAP2��CHAP3��CHAPA��CHAPB �� CHAPC �����δ���:


$ FILE_LIST = "1,2,3,A,B,C"
$ INDEX = 0
$PROCESS:
$ NUM = F$ELEMENT(INDEX,",",FILE_LIST)
$ IF NUM .EQS. "," THEN GOTO END_LOOP
$ FILE = "CHAP''NUM'"
$ ! process file named by FILE
   .
   .
   .
$ INDEX = INDEX + 1
$ GOTO PROCESS
$END_LOOP:
$ EXIT

�����������У��������ʹ��һ��ѭ�����ڷ��� FILE_LIST ���г����ļ����Ƶ���һ���ڵ��Ŀ¼��:


$ FILE_LIST = "CHAP1/CHAP2/CHAP3/CHAP4/CHAP5"
$ NUM = 0
$!
$! Process each file listed in FILE_LIST
$ PROCESS_LOOP:
$     FILE = F$ELEMENT(NUM,"/",FILE_LIST)
$     IF FILE .EQS. "/" THEN GOTO DONE
$     COPY 'FILE'.MEM MORRIS::DISK3:[DOCSET]*.*
$     NUM = NUM + 1
$     GOTO PROCESS_LOOP
$!
$ DONE:
$ WRITE SYS$OUTPUT "Finished copying files."
$ EXIT

F$ELEMENT �ʷ��������صĵ�һ���ļ��� CHAP1����һ���ļ��� CHAP2���Դ����ơ�ÿѭ��һ�Σ�NUM ��ֵ�ͼ� 1���Ա�����һ���ļ������� F$ELEMENT ����һ��б��ʱ���ʹ����� FILE_LIST ��������Ŀ��������ֹѭ����

14.20 ʹ�� PIPE ����

PIPE ������ͬһ��������ִ��һ������ DCL �����ַ���������ִ�� UNIX ʽ���������������������ˮ�ߡ�����/����ض��������ͺ�ִ̨�С�

����ʽ���������֧�ֻ����������Ŀ�����ʹ�ã�������������Щ��ʽ����ˮ���������������������Ŀ��ϵͳ�ϡ�

���¼�������ʹ�� PIPE ����IJ�ͬ������ִ�� DCL �������ж� PIPE �������θĽ��ӽ������ܡ���������˵����

�й� PIPE �����������Ϣ������� OpenVMS DCL Dictionary: N--Z��

�������ڵ��� PIPE ������ָ����� DCL ���Ȼ��˳��ִ����Щ DCL ���ʹ�ø�ʽ����:


PIPE command-sequence ; command-sequence [; command-sequences]...

14.20.1 ʹ�� PIPE ����ִ����������

һ���������е�ִ������������������һ���������е�ִ�н����ʹ�ø�ʽ:


PIPE command-sequence1 && command-sequence2

ע�⣬ֻ�� command-sequence1 �ɹ�����ִ�� command-sequence2�����ʹ�����¸�ʽ����ֻ�� command-sequence1 ʧ�ܣ���ִ�� command-sequence2��


PIPE command-sequence1 || command-sequence2


ǰҳ ��ҳ Ŀ¼ ����