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

HP OpenVMS Systems Documentation

Content starts here

OpenVMS �û��ֲ�


ǰҳ Ŀ¼ ����

14.12.2 ʹ�� /INDEX �� /KEY �޶���

Ҫ����ش�����˳���ļ���ȡ��¼��ʹ�� READ �����޶��� /INDEX �� /KEY����Щ�޶���ָ��Ӧ���������ļ���ȡ��¼:�������в���ָ���ļ�������������������ļ�¼�������ָ��һ����������ʹ�������� (0)��

������ض�ȡһ����¼֮��ʹ�ò��� /KEY �� /INDEX �޶��ʵ� READ �������˳��ض�ȡ�ļ���ʣ�ಿ�֡�

14.12.3 ʹ�� /DELETE �޶���

������ʹ�ô� /DELETE �޶��ʵ� READ ���������˳���ļ���ɾ����¼��/DELETE �޶���ʹһ����¼�ڶ�ȡ֮����ļ�ɾ����ʹ�ô� /INDEX �� /KEY �޶��ʵ� /DELETE �޶��ʿ�ɾ��һ��������ָ���ļ�¼��

�й� /DELETE��/INDEX �� /KEY �޶��ʵ����飬����� OpenVMS DCL Dictionary �� READ �����������

14.13 ʹ�ùر�����

CLOSE ����ر��ļ���������� OPEN ��������߼����ĸ�ֵ��ȷ�������������ֹ֮ǰ���ر�����������д򿪵������ļ���������ܹرմ򿪵��ļ�����ô�����������ֹʱ����ļ���Ȼ���ִ򿪣������ѷ�������ļ����߼�������ӽ����߼�����ɾ����

�����������У�CLOSE ����ر��ļ� STATS.DAT ������߼��� INFILE ��ֵ:


$ OPEN INFILE DISK4:[MURPHY]STATS.DAT
   .
   .
   .
$ CLOSE INFILE

14.14 �޸��ļ�

���������޸��ļ������ַ���:

  • ���¼�¼
  • �����µ�����ļ�
  • ���Ӽ�¼

14.14.1 ���¼�¼

ʹ�ø��·����޸ļ�¼ʱ�������Զ��ļ���������¼���н�С���ġ���Ϊ������������������ļ�¼�Ĵ�С�����ļ��еļ�¼�������ֻ�Ը�ʽ��¼���ļ���ʹ���� (���磬�������ļ���)��

Ҫ���ļ����н�С���ģ�ʹ���������:

���� ����
1 ���ж���д��ȡȨ�ļ���
2 ʹ�� READ ����ͨ���ļ���ֱ����Ҫ�޸ĵļ�¼��
3 �޸������¼��

��˳���ļ��У������¼���ı���С������ȫ��ԭʼ��¼һ��������޸ļ�¼���ı��϶̣���ô�ÿո��¼��䣬�ѿո����ӵ��޸ļ�¼��ĩ�ˣ�ֱ������ԭʼ��¼������ͬ������޸ļ�¼���ı��ϳ�������Ҫ�������ļ���

4 ʹ�� WRITE/UPDATE ������޸ļ�¼д��ԭ�����ļ���
5 �ظ����� 2 �� 4��ֱ�������˴�����ĵ����м�¼��
6 ʹ�� CLOSE ����ر�����ļ���

���ر�����ļ�֮���������뿪ʼʱͬ���İ汾�ţ���ʹ�����¼�ѱ����ġ�

�����������չʾ���ͨ����ȡ�͸��¸����¼����˳���ļ�:


$! Open STATS.DAT and assign it the logical name FILE
$!
$ OPEN/READ/WRITE FILE DISK4:[MURPHY]STATS.DAT
$ BEGIN_LOOP:
$! Read the next record from FILE into the symbol RECORD
$     READ/END_OF_FILE=END_LOOP FILE RECORD
$! Display the record and see if the user wants to change it
$! If yes, get the new record.  If no, repeat loop
$!
$     PROMPT:
$          WRITE SYS$OUTPUT RECORD
$          INQUIRE/NOPUNCTUATION OK "Change? Y or N [Y] "
$          IF OK .EQS. "N" THEN GOTO BEGIN_LOOP
$          INQUIRE NEW_RECORD "New record"
$! Compare the old and new records
$! If old record is shorter than new record, issue an
$! error message. If old record and new record are the
$! same length, write the record. Otherwise pad the new
$! record with spaces so it is correct length
$!
$          OLD_LEN = F$LENGTH(RECORD)
$          NEW_LEN = F$LENGTH(NEW_RECORD)
$          IF OLD_LEN .LT. NEW_LEN THEN GOTO ERROR
$          IF OLD_LEN .EQ. NEW_LEN THEN GOTO WRITE_RECORD
$          SPACES = "             "
$          PAD = F$EXTRACT(0,OLD_LEN-NEW_LEN,SPACES)
$          NEW_RECORD = NEW_RECORD + PAD
$!
$     WRITE_RECORD:
$          WRITE/UPDATE FILE NEW_RECORD
$          GOTO BEGIN_LOOP
$!
$     ERROR:
$          WRITE SYS$OUTPUT "Error -- New record is too long"
$          GOTO PROMPT
$!
$     END_LOOP:
$          CLOSE FILE
$          EXIT

ϵͳ�Ѽ�¼��ʾ���ն��ϣ���������¼�Ƿ���Ҫ�޸ġ������ѡ���޸ļ�¼���ʹ��ն˶�ȡ�¼�¼�����Ұ����ij�����ԭʼ��¼���Ƚ��бȽϡ����ԭʼ��¼�ϳ�����ô������Ŀո�ʹ�¼�¼��ͬ���Ĵ�С�����ԭʼ��¼�϶̣���ϵͳ��ʾ������Ϣ�����ٴ���ʾ�����¼�¼��

14.14.2 �����µ�����ļ�

Ҫ���ļ����д�ĸ��ģ������ڶ���ȡ���ļ����Ҵ�����д��ȡ�����ļ�����Ϊ�ǽ����µ�����ļ�����˿����޸ļ�¼�Ĵ�С�����Ӽ�¼��ɾ����¼������¼��

OPEN/WRITE ��������ļ�����д��ȡ�����ļ���������ԭʼ�ļ�ͬ�������ƣ����Ұ汾�űȾ��ļ��İ汾�Ŵ� 1��

ע��

Ҫȷ������ȷ���ļ����ڶ�ȡ���ڴ�����д��ȡ���°汾֮ǰ����������ڶ���ȡ�������ļ���

Ҫ���������޸ĵ��ļ���ʹ�����¹���:

���� ����
1 �����ڶ���ȡ���ļ���

���������ļ���Ҳ�����޸ĵ��ļ���

2 ��һ������д��ȡ�����ļ���

��������ļ���Ҳ�����������ļ����������������ļ��������ļ�ͬ������ô����ļ��İ汾�Ž��б������ļ��� 1 ��

3 ʹ�� READ ������޸ĵ��ļ���ȡÿ����¼��

������ԭʼ�ļ���ȡÿ����¼ʱ��������δ��������¼��

4 ������ȡ�ʹ�����¼��ֱ����ɡ�
5 ʹ�� CLOSE ����ر������ļ�������ļ���

�����±����У����� RECORD ������ԭʼ�ļ���ȡ�ļ�¼:

�����¼�� ��ô
������ ��ͬ���ķ���д�����ļ���
���� ʹ�� INQUIRE ����Ѳ�ͬ�ļ�¼����������ţ�Ȼ�������޸ķ���д�����ļ���
ɾ�� �����������д�����ļ���
���� ʹ��һ��ѭ���Ѽ�¼����������ţ�Ȼ����������д�����ļ���

����: �޸ļ�¼

  • �����������У����� NEW_FILE ��д�����ļ�:


    $ ! No change
    $ WRITE NEW_FILE RECORD
    
  • �����������У�INQUIRE ����������һ�����޸ĵķ���д�����ļ�:


    $ ! Change
    $ INQUIRE NEW_RECORD "New record"
    $ WRITE NEW_FILE NEW_RECORD
    
  • �����������У�ʹ��һ��ѭ���ѷ���д�����ļ�:


    $ ! Insertion
    $LOOP:
    $ !Get new records to insert
    $ INQUIRE NEW_RECORD "New record"
    $ IF RECORD .EQS. "" THEN GOTO END_LOOP
    $ WRITE NEW_FILE NEW_RECORD
    $ GOTO LOOP
    $END_LOOP:
    

����: ��������ļ�

��������չʾһ��������̣����������ļ���ȡ��¼�����������¼��Ȼ��������¼���Ƶ�һ������ļ�:


$! Open STATS.DAT for reading and assign it
$! the logical name INFILE
$! Open a new version of STATS.DAT for writing
$! and assign it the logical name OUTFILE
$!
$ OPEN/READ INFILE DISK4:[MURPHY]STATS.DAT
$ OPEN/WRITE OUTFILE DISK4:[MURPHY]STATS.DAT
$!
$ BEGIN_LOOP:
$! Read the next record from INFILE into the symbol RECORD
$!
$     READ/END_OF_FILE=END_LOOP INFILE RECORD
$! Display the record and see if the user wants to change it
$! If yes, get the new record
$! If no, write record directly to OUTFILE
$!
$     PROMPT:
$          WRITE SYS$OUTPUT RECORD
$          INQUIRE/NOPUNCTUATION OK "Change? Y or N [Y] "
$          IF OK .EQS. "N" THEN GOTO WRITE_RECORD
$          INQUIRE RECORD "New record"
$!
$     WRITE_RECORD:
$          WRITE OUTFILE RECORD
$          GOTO BEGIN_LOOP
$!
$! Close input and output files
$     END_LOOP:
$          CLOSE INFILE
$          CLOSE OUTFILE
$          EXIT

14.14.3 Ϊ�ļ����Ӽ�¼

ʹ�����¹��� (OPEN/APPEND ����) �Ѽ�¼���ӵ������ļ���ĩ��:

���� ����
1 ʹ�ô� /APPEND �޶��ʵ� OPEN ����Ѽ�¼ָ�붨λ���ļ�β��

/APPEND �޶��ʲ������ļ����°汾��

2 ʹ�� WRITE ����д���µ����ݼ�¼��
3 �������Ӽ�¼��ֱ����ɡ�
4 ʹ�� CLOSE ����ر�����ļ���

����������̰Ѽ�¼���ӵ��ļ� STATS.DAT ��ĩ��:


$! Open STATS.DAT to append files and assign
$! it the logical name FILE
$!
$ OPEN/APPEND FILE DISK4:[MURPHY]STATS.DAT
$!
$ BEGIN_LOOP:
$! Obtain record to be appended and place this
$! record in the symbol RECORD
$!
$     PROMPT:
$          INQUIRE RECORD -
           "Enter new record (press RET to quit) "
$          IF RECORD .EQS. "" THEN GOTO END_LOOP
$! Write record to FILE
$!
$          WRITE FILE RECORD
$          GOTO BEGIN_LOOP
$!
$! Close FILE and exit
$!
$     END_LOOP:
$          CLOSE FILE
$          EXIT

14.15 �����ļ� I/O ����

�� OPEN��READ �� WRITE ����ʹ�� /ERROR �޶��ʿ�����ϵͳ������Ϣ�����ѿ��ƴ��ݵ�ָ���ı�š�������������������ڼ��������ô /ERROR �޶���ȡ�����������������ƻ��� (������ READ �����ϵ� /END_OF_FILE �޶���֮��)��

�������Ӷ� OPEN ����ʹ�� /ERROR �޶���:


$ OPEN/READ/ERROR=CHECK FILE CONTINGEN.DOC
   .
   .
   .
$ CHECK:
$  WRITE SYS$OUTPUT "Error opening file"

OPEN ����������ļ� CONTINGEN.DOC ���ڶ�ȡ��������ܴ�����ļ� (���磬����ļ�������)����ô OPEN �����һ���������������ѿ��ƴ��ݵ� CHECK ��š�

/ERROR �޶���ָ���ij���·��ȡ������������ĵ�ǰ ON �����������������Ŀ���ű��ɹ��ظ������ƣ���ô������ȫ�ַ��� $STATUS ���ֳ������롣�����ڳ����������г�����ʹ�� F$MESSAGE �ʷ���������ʾ $STATUS �е���Ϣ��

�����������У��ʷ����� F$MESSAGE ������ʾ F$STATUS �ʻ������:


$ OPEN/READ/ERROR=CHECK FILE 'P1'
   .
   .
   .
$ CHECK:
$  ERR_MESSAGE = F$MESSAGE($STATUS)
$  WRITE SYS$OUTPUT "Error opening file: ",P1
$  WRITE SYS$OUTPUT ERR_MESSAGE
   .
   .
   .

14.15.1 Ĭ�ϳ�������

ʹ�� OPEN��READ��WRITE �� CLOSE ����ʱ���������������û��ָ��������������ô��ȡ��ǰ�� ON �������

READ �������һ���ļ�������Ϣʱ�����������ȷ������:

  • ���ʹ�� /END_OF_FILE �޶��ʣ����Ʊ����ݵ�ָ���ı�š�
  • ���û��ʹ�� /END_OF_FILE �޶��ʣ����ƾͱ����ݵ� /ERROR �޶���ָ���ı�š�
  • ���û��ָ������һ���޶��� (/END_OF_FILE �� /ERROR)����ô��ȡ��ǰ�� ON �������

14.16 ����ִ�����ļ���

������̵�����ִ������˳���: �����е���������ִ�У�ֱ���ļ�β��Ȼ������Ҳ���Կ���ijЩ����Ƿ�ִ�У����߹�����ʲô������Ӧ�ü���ִ�С�

���¼�������:

  • �����������ƻ�ı�ִ������ DCL ����:
    • IF��THEN��ELSE
    • GOTO
    • GOSUB
    • CALL
  • ʹ�������
  • ��д Case ���
  • ��дѭ��

14.16.1 ʹ�� IF ����

IF ������Ա���ʽ��ֵ��������ʽ�Ľ��Ϊ��ʱִ��һ�������һ�����������ʽ�Ľ��Ϊ��ʱ�������������֮һ:

  • ��һ��������� THEN ����ʱ���Ͳ�ִ��������ִ�к�������
  • ��һ��������� THEN �����û��ָ�� ELSE ����ʱ��������������ִ�к���� ENDIF ���
  • ָ�� ELSE ����ʱ����ִ������������� ELSE �����һ�����

DCL Ϊ IF �����ṩ������ͬ��ʽ����Ϊ��� IF ����ָ���ı���ʽΪ��ʱ����һ����ʽִ�е���������� 13 ��������

DCL Ҳ�ṩһ����ṹ IF ��ʽ�����ָ���ı���ʽΪ�棬��ô��ṹ IF ����ִ��һ������������ҽ��ܿ�ѡ��ELSE ��䣬�������ʽΪ����ִ��һ���������

14.16.2 ʹ�� THEN ����

������ʽΪ��ʱҪִ��һ�����������ָ�� THEN ����Ϊһ������ (ǰ�������Ԫ���� DCL ����)�������� ENDIF �����ֹ��Ϊ����Ŀ�ṹ��䡣

�����������У�THEN �������һ������:


$ IF expression
$   THEN
$       command
$       command
   .
   .
   .
$ ENDIF

14.16.3 ʹ�� ELSE ����

������ʽΪ��ʱҪִ��һ�����������ָ�� ELSE ���Ϊһ�����ʣ������� ENDIF �����ֹ��Ϊ����Ŀ�ṹ��䡣

�����������У�ELSE ��������һ������:


$ IF expression
$   THEN
$       command
$       command
   .
   .
   .
$   ELSE
$       command
$       command
   .
   .
   .
$ ENDIF

14.16.4 ʹ�������

�������԰����ַ���ִ�У���ȡ�������ǰ���Щ�������ͬһ������̣����ǰ����Ƿ�����һ��������̲�������ִ�С���ָ������:

  • �������Щ�������ͬһ��������У���ô�����Ƿ��� THEN ���֮������:


    $ IF condition
    $ THEN  command
            command
       .
       .
       .
    $ ENDIF
    
  • �������Щ�������һ�������Ĺ��̣���ô������������������Ϊ THEN ����һ���֡�����:


    $ IF condition
    $ THEN @command_procedure
    $ ELSE command
    $      command
    $ ENDIF
    
  • ���Լ���ָ���ǿ�ṹ�� IF ��ʽ�����ҵ�����ָ��������ʱ�ѿ�����ָ������ŵ���������:


    $ IF not condition THEN GOTO END_LABEL
       .
       .
       .
    $END_LABEL:
    

�� IF ����ʽ�Ľ��Ϊ��ʱ��������ִ���� THEN ����֮���һ�����ʹ��һ������ʱ���� THEN ������Ϊ��һ��������ڸ��� IF ������������ϡ�

�����������У��� F$MODE ���� "INTERACTIVE" ʱ��ִ������ SET TERMINAL ����Ұ�������̵Ŀ��ƴ��ݸ���� PROCEED���� F$MODE ������ "INTERACTIVE" ʱ���˳�������̡�


$ IF F$MODE () .EQS. "INTERACTIVE"
$ THEN
$    SET TERMINAL/DEVICE=VT320
$    SET TERMINAL/WIDTH=132
$    GOTO PROCEED
$ ENDIF
$ EXIT
$PROCEED:

��������˵�����ʹ�� IF ����� ELSE ��������һ��������:


$ INQUIRE DEV "Device to check"
$ IF F$GETDVI(DEV, "EXISTS")
$ THEN
$    WRITE SYS$OUTPUT "The device exists."
$    SHOW DEVICE 'DEV'
$    SET DEVICE/ERROR_LOGGING 'DEV'
$ ELSE
$     WRITE SYS$OUTPUT "The device does not exist."
$    WRITE SYS$OUTPUT "Error logging has not been enabled."
$ ENDIF
$ EXIT

������Ϊ��ʱ��������̰�һ����Ϣд�� SYS$OUTPUT ��ִ�� SHOW DEVICE �� SET DEVICE �����������Ϊ��ʱ��������̰�������Ϣд�� SYS$OUTPUT��

��ʹ�� IF-THEN-ELSE ���Խṹʱ����ѭ��������:

  • IF ����Ƕ�׼����ܳ��� 15 ����
  • ʹ�� ELSE �� ENDIF �����ֹ THEN ��俪ʼ������顣
  • ʹ�� ENDIF �����ֹ ELSE ��俪ʼ������顣
  • �� IF ���֮��ʹ�� THEN �����Ϊ��һ����ִ����䡣
  • ��Ҫ�ڰ��� THEN �� ELSE ������������ָ����š�Ȼ�����������ڰ��� ENDIF ������������ָ����š���������ڵ�ǰ������ڷ�֧�����Dz������֧����һ���������м䡣

�����ʽ

������� IF ����ı���ʽ���԰���һ���������ֳ����������֡���������ʷ��������������߼����������ַ���������ָ������һ������ʽ������ֵ֮һ������Ϊ��:

  • ����ֵ
  • ����ĸ Y��y��T �� t ��ʼ���ַ���ֵ
  • �������γ�����ֵ�����ֵ��ַ���ֵ (���磬�ַ��� "27")

�ٱ���ʽ

���һ������ʽ������ֵ֮һ������Ϊ��:

  • ż��ֵ
  • ���Ǵ���ĸ Y��y��T �� t ��ʼ���ַ���ֵ
  • �������γ�ż��ֵ�����ֵ��ַ���ֵ (���磬�ַ��� "28")

��д����ʽ

Ϊ IF �����д����ʽʱ��������¹���:

  • �� IF �����ʹ�÷���ʱ�����ǵ�ֵ���Զ��滻������ʹ��ʡ�Ժ� (') ��Ϊ�滻�������������Ҫǿ�Ƶ������롣
  • �ַ����Ƚ��������������ĸ S�����磬����� .EQS.��.LTS. �� .GTS. �����ַ����Ƚϡ��෴������� .EQ.��.LT. �� .GT. ���������Ƚϡ�
  • �����Բ鿴�����ַ����Ƿ���ͬʱ��DCL ���ҵ�ƥ���ַ�������ʹ��ͬ������ĸ��Сд�ʹ��򡣼���˵���ַ��� "COPY" �������ַ��� "copy" ���ַ��� "CoPy"��

��������˵�������� IF ����һ��ʹ�õı���ʽ�������������ӣ������ OpenVMS DCL Dictionary�� IF �����������

��һ������ʹ��һ���߼������������ִֻ�и��� THEN ����һ����������� CONT ��Ϊ��ʱ���˳�������̡�


$ INQUIRE CONT "Do you want to continue [Y/N]"
$ IF .NOT. CONT THEN EXIT
   .
   .
   .

���������� IF ����ʽ��ʹ��һ�����ź�һ�����:


$ INQUIRE CHANGE "Do you want to change the record [Y/N]"
$ IF CHANGE THEN GOTO GET_CHANGE
   .
   .
   .
$ GET_CHANGE:
   .
   .
   .

������ CHANGE Ϊ��ʱ�����̰ѿ��ƴ��ݵ���� GET_CHANGE�����򣬹���ִ�и��� IF ��������

��һ������˵��������ͬ�� IF ����:


$ COUNT = 0
$ LOOP:
$    COUNT = COUNT + 1
$    IF COUNT .EQ. 9 THEN EXIT
$    IF P'COUNT' .EQS. "" THEN EXIT
   .
   .
   .
$ GOTO LOOP

��һ�� IF ����Ƚ������������ڶ��� IF ����Ƚ������ַ�����ע�⣬.EQ. ��������������Ƚϣ��� .EQS. ����������ַ����Ƚϡ�

���ȣ�COUNT ֵ������ 9 ���бȽϡ���������ֵ��ͬʱ�����˳�������̣���������ֵ����ͬʱ�����̼����������˸����� (�����������) ��ѭ����ֹ��

�ڵڶ��� IF ����ʽ�У����� P'COUNT' ���ַ���ֵ��մ����бȽϲ鿴��������Ƿ���δ����ġ�ע�⣬����ʹ��ʡ�Ժ�ǿ�ƶԷ��� COUNT ���е����滻�����磬�� COUNT �� 2 ʱ����һ������Ľ���� P2��Ȼ��P2 ��ֵʹ�����ַ����Ƚ��С�

�� IF ����ʽ�Ľ��Ϊ��ʱ����Ҳ����ִ��һ��������������̡��������ӵ� IF ����ʽ�Ľ��Ϊ��ʱ��ִ��������� EXIT_ROUTINE.COM:


$ GET_COMMAND_LOOP:
$    INQUIRE COMMAND -
     "Enter command (DELETE, DIRECTORY, EXIT, PRINT, PURGE, TYPE)"
$    IF COMMAND .EQS. "EXIT" THEN @EXIT_ROUTINE


ǰҳ ��ҳ Ŀ¼ ����