  | 
		
HP COBOL Reference Manual
 
 
6.8.43 WRITE
Function
 
 
The WRITE statement releases a logical record to an output or
input-output file. It can also position lines vertically on a logical
page.
  
 
rec-name
is the name of a logical record described in the Data Division File
Section. The logical record cannot be in a sort-merge file description
entry.
src-item
is the identifier of the data item that contains the data.
advance-num
is an integer or the identifier of an unsigned data item described as
an integer. Its value can be zero.
top-of-page-name
is a mnemonic-name equated to C01 in the SPECIAL-NAMES paragraph of the
Environment Division. It represents top-of-page and is equivalent to
the PAGE phrase.
stment
is an imperative statement executed when the relevant condition
(end-of-page or invalid key) occurs.
stment2
is an imperative statement executed when the relevant condition (not at
end-of-page or not invalid key) occurs.
 
Syntax Rules
 
 
  - Format 1 must be used for sequential files.
  
 - Format 2 must be used for relative and indexed files.
  
 - If the file description entry containing rec-name has a
  LINAGE clause, the WRITE statement cannot have an ADVANCING
  top-of-page-name phrase.
  
 - If there is an END-OF-PAGE phrase, the file description entry
  containing rec-name must have a LINAGE clause.
  
 - The words END-OF-PAGE and EOP are equivalent.
  
 - In Format 2, there must be an INVALID KEY phrase if there is no
  applicable USE AFTER EXCEPTION procedure for the file.
  
 - To use the ALLOWING option, the program must include these entries:
  
    - LOCK-HOLDING clause of the I-O-CONTROL paragraph
    
 - ALLOWING option of the OPEN statement
  
  
   - If src-item is a function-identifier, it must reference an
  alphanumeric function. When src-item is not a
  function-identifier, rec-name and src-item must not
  reference the same storage area.
  
 - The ADVANCING PAGE and END-OF-PAGE phrase cannot be used in the
  same WRITE statement.
  
 - ADVANCING cannot be used with LINE SEQUENTIAL (Alpha, I64).
  
 -  The ALLOWING clause is Hewlett-Packard standard file-sharing
  syntax, and cannot be used for a file connector that has had X/Open
  standard file-sharing syntax (WITH [NO] LOCK or LOCK MODE) specified.
  
General Rules
 
 
All Files
 
 
  - The record is no longer available in rec-name after a
  WRITE statement successfully executes. However, if the associated
  file-name is in a SAME RECORD AREA clause, the record is available in
  rec-name. In this case, the record is also available in the
  record areas of other file-names in the same SAME RECORD AREA clause.
  
 - The FROM Phrase section lists the rules for the FROM phrase.
  
 - For mass storage files, the WRITE statement does not affect the
  File Position Indicator.
  
 - The WRITE statement updates the value of the FILE STATUS data item
  for the file.
  
 - A file's maximum record size is set when it is created. It cannot
  be changed later.
  
 - On a mass storage device, the number of characters required to
  store a logical record in a file depends on file organization and
  record type. (See Technical Notes.)
  
 - WRITE statement execution releases a logical record to the I-O
  system.
  
 - The ALLOWING NO OTHERS option can be used only in a Hewlett-Packard
  standard manual record-locking environment. To create a manual
  record-locking environment, the program must open file-name with an
  ALLOWING option and specify the APPLY LOCK-HOLDING phrase of the
  I-O-CONTROL paragraph. If you use manual locking (APPLY LOCK-HOLDING),
  then the ALLOWING NO OTHERS clause on the WRITE statement is required.
  
 - The ALLOWING NO OTHERS option locks the current record. No other
  concurrent access stream can access this record until it is unlocked.
  
 However, on Tru64 UNIX systems, for indexed files the WRITE
  statement with the ALLOWING clause does not acquire a record lock.
  <>
   - If there is an applicable USE AFTER EXCEPTION procedure, it
  executes whenever an input or output condition occurs that would result
  in a nonzero value in the first character of a FILE STATUS data item.
  However, it does not execute if: (a) the condition is invalid key, and
  (b) there is an INVALID KEY phrase. 
 See the rules for the INVALID
  KEY phrase, Section 6.6.10.
   -  The number of character positions in the record to be written must
  not be less than the lowest or greater than the highest number of
  character positions allowed by the RECORD VARYING clause. In either
  case, the WRITE statement is unsuccessful and the following occurs:
  
    - The WRITE operation does not take place.
    
 - The contents of the record area remain unaffected.
    
 - The I-O status of the file is set to a value that indicates the
    cause of the condition.
  
  
  
Sequential or Line Sequential (Alpha, I64) Files
 
 
  - The file must be open in the OUTPUT or EXTEND mode when the WRITE
  statement executes. (See Table 6-15.)
  
 - The sequence of records in a sequential file is set by the order of
  WRITE statement executions that create the file. The relationship does
  not change, except when records are added to the end of the file.
  
 - For a sequential file open in the extend mode, the WRITE statement
  adds records to the end of the file as if the file were open in the
  output mode. If the file has records, the first record written after
  execution of an OPEN statement with the EXTEND phrase is the successor
  of the file's last record.
  
 - When a program tries to write beyond a sequential file's externally
  defined boundaries (for example,attempting to write to a full disk
  device), an exception condition exists as follows:
  
    - The contents of the record area are unaffected.
    
 - The value of the FILE STATUS data item for the file indicates a
    boundary violation.
    
 - If a USE AFTER EXCEPTION procedure applies to the file, it executes.
    
 - If there is no applicable USE AFTER EXCEPTION procedure, the
    program terminates abnormally.
  
  
   - If the end of a reel/unit is recognized, and the WRITE does not
  exceed the externally defined file boundaries:
  
    - A reel/unit swap occurs.
    
 - The Current Volume Pointer points to the file's next reel/unit.
  
  
   - If the program reaches the end of the logical page during execution
  of a WRITE statement with the END-OF-PAGE phrase, stment
  executes. The LINAGE clause associated with the file specifies the
  logical end.
  
 - An end-of-page condition is reached when a WRITE statement with the
  END-OF-PAGE phrase causes printing or spacing in the footing area of
  the page body. 
 This condition occurs when the WRITE statement
  causes the LINAGE-COUNTER to equal or exceed the value in the LINAGE
  clause FOOTING phrase. stment then executes after
  rec-name is written to the file.  If this statement does
  not occur and the NOT END-OF-PAGE is specified, rec-name is
  written to the file, file status is updated, and control is transferred
  to stment2.
   - An automatic page overflow condition occurs when the page body
  cannot fully accommodate a WRITE statement (with or without the
  END-OF-PAGE phrase). 
 This condition occurs when WRITE statement
  execution would cause the LINAGE-COUNTER to exceed the number of lines
  in the page body specified in the LINAGE clause. When this happens, the
  line is presented on the logical page before or after (depending on the
  phrase) device positioning. The device is positioned to the first line
  that can be written on the next logical page (as described in the
  LINAGE clause). stment then executes after rec-name
  is written to the file.
   - If there is no LINAGE clause FOOTING phrase, the WRITE statement
  operates as if the FOOTING phrase value was beyond the limits of the
  page. That is, the end-of-page condition occurs after the specified
  number of lines per page are written. No space is reserved for a
  footing.
  
 - If there is a FOOTING phrase, and a WRITE statement would cause the
  LINAGE-COUNTER to exceed both the number of lines in a logical page and
  the value in the LINAGE clause FOOTING phrase, the WRITE statement
  operates as if there were no FOOTING phrase.
  
Relative Files
 
 
  - The file must be open in the OUTPUT, I-O, or EXTEND mode when the
  WRITE statement executes. (See Table 6-15.)
  
 - When a relative file with sequential access mode is open in the
  output mode, the WRITE statement releases a record to the I-O system.
  The first record has a relative record number of 1. Subsequent records
  have relative record numbers of 2, 3, 4, and so on. If rec-name
  has an associated RELATIVE KEY data item, the WRITE places the
  relative record number of the released record into it.
  
 -  When a relative file with sequential access mode is open in the
  extend mode, the WRITE statement releases a record to the I-O system.
  The first record has a relative record number one greater than the
  highest relative record number existing in the file. Subsequent records
  have consecutively higher relative record numbers. If rec-name
  has an associated RELATIVE KEY data item, the WRITE statement
  places the relative record number of the released record into it.
  
 -  When a relative file with random or dynamic access mode is open in
  the output mode, the program must place a value in the RELATIVE KEY
  data item before executing the WRITE statement. The value is the
  relative record number to associate with the record in
  rec-name. The WRITE statement releases the record to the I-O
  system.
  
 - When a relative file is open in the I-O mode and the access mode is
  random or dynamic, the program must place a value in the RELATIVE KEY
  data item before executing the WRITE statement. The value is the
  relative record number to associate with the record in
  rec-name. Executing a Format 2 WRITE statement releases the
  record to the I-O system.
  
 - The invalid key condition exists when:
  
    - The access mode is random or dynamic, and the RELATIVE KEY data
    item specifies a record that already exists in the file.
    
 - The program tries to write a record beyond the externally defined
    file boundaries.
    
 - The number of significant digits in the relative record number is
    larger than the size of the relative key data item described for the
    file.
  
  
   - When the program detects an invalid key condition, WRITE statement
  execution is unsuccessful. The following results occur:
  
    - The contents of the current record area are not affected.
    
 - The WRITE statement sets the FILE STATUS data item for the file to
    indicate the cause of the condition.
    
 - Program execution continues according to the rules for the invalid
    key condition. 
 See the rules for the INVALID KEY phrase,
    Section 6.6.10.
    
  
  
  
		 |