OpenVMS �û��ֲ�
14.12.2 ʹ�� /INDEX �� /KEY ����
Ҫ����ش�����˳���ļ���ȡ��¼��ʹ�� READ
�������� /INDEX �� /KEY����Щ����ָ��Ӧ���������ļ���ȡ��¼:�������в���ָ���ļ�������������������ļ�¼�������ָ��һ����������ʹ�������� (0)��
������ض�ȡһ����¼֮��ʹ�ò��� /KEY �� /INDEX ���ʵ� READ �������˳��ض�ȡ�ļ���ʣ�ಿ�֡�
������ʹ�ô� /DELETE ���ʵ� READ ���������˳���ļ���ɾ����¼��/DELETE ����ʹһ����¼�ڶ�ȡ֮����ļ�ɾ����ʹ�ô� /INDEX ��
/KEY ���ʵ�
/DELETE ���ʿ�ɾ��һ��������ָ���ļ�¼��
�й� /DELETE��/INDEX �� /KEY ���ʵ����飬����� OpenVMS DCL Dictionary �� READ �����������
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�����ԭʼ��¼���Ƚ��бȽϡ����ԭʼ��¼�ϳ�����ô������Ŀո�ʹ�¼�¼��ͬ���Ĵ�С�����ԭʼ��¼�϶̣���ϵͳ��ʾ������Ϣ�����ٴ���ʾ�����¼�¼��
Ҫ���ļ����д�ĸ��ģ������ڶ���ȡ���ļ����Ҵ�����д��ȡ�����ļ�����Ϊ�ǽ����µ�����ļ�����˿����ļ�¼�Ĵ�С�����Ӽ�¼��ɾ����¼������¼��
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
��䣬�������ʽΪ����ִ��һ���������
������ʽΪ��ʱҪִ��һ�����������ָ�� 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
|
|