MainframeMaster

COBOL Tutorial

COBOL START Statement

The START statement in COBOL positions a file at a specific record based on a key value, without reading that record. START is used with indexed and relative files to position the file pointer at a record matching specified key criteria. After START, subsequent READ operations begin from that position, enabling efficient positioned access and sequential processing from specific key values.

START is essential for indexed file processing when you need to begin reading from a specific key value rather than from the beginning of the file. Understanding START is crucial for efficient file navigation and positioned sequential access in COBOL programs.

Basic START Syntax

cobol
1
2
3
4
5
START file-name KEY IS {EQUAL TO | GREATER THAN | NOT LESS THAN} key-value [INVALID KEY statements] [NOT INVALID KEY statements] END-START

Simple START Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS CUSTOMER-ID FILE STATUS IS FILE-STATUS-CODE. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(8). 05 CUSTOMER-NAME PIC X(30). WORKING-STORAGE SECTION. 01 FILE-STATUS-CODE PIC X(2). 01 SEARCH-KEY PIC 9(8) VALUE 50000000. PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT CUSTOMER-FILE *> Position file at customer ID 50000000 START CUSTOMER-FILE KEY IS GREATER THAN SEARCH-KEY INVALID KEY DISPLAY "No records found with key > " SEARCH-KEY NOT INVALID KEY DISPLAY "Positioned at key > " SEARCH-KEY *> Read records sequentially from this position PERFORM READ-SEQUENTIAL-RECORDS END-START CLOSE CUSTOMER-FILE STOP RUN. READ-SEQUENTIAL-RECORDS. PERFORM UNTIL FILE-STATUS-CODE = "10" READ CUSTOMER-FILE NEXT RECORD AT END CONTINUE NOT AT END DISPLAY "Customer: " CUSTOMER-ID " " CUSTOMER-NAME END-READ END-PERFORM.

START Key Operators

  • EQUAL TO: Position at exact key match
  • GREATER THAN: Position at first record with key greater than specified value
  • NOT LESS THAN: Position at first record with key greater than or equal to specified value

Complete START Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
IDENTIFICATION DIVISION. PROGRAM-ID. START-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PRODUCT-FILE ASSIGN TO "PRODUCT.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS PRODUCT-CODE FILE STATUS IS FILE-STATUS-CODE. DATA DIVISION. FILE SECTION. FD PRODUCT-FILE. 01 PRODUCT-RECORD. 05 PRODUCT-CODE PIC X(10). 05 PRODUCT-NAME PIC X(30). 05 PRODUCT-PRICE PIC 9(6)V99. WORKING-STORAGE SECTION. 01 FILE-STATUS-CODE PIC X(2). 01 START-KEY PIC X(10) VALUE "PROD-0500". 01 RECORD-COUNT PIC 9(4) VALUE 0. PROCEDURE DIVISION. MAIN-LOGIC. DISPLAY "=== START Statement Example ===" OPEN INPUT PRODUCT-FILE IF FILE-STATUS-CODE = "00" *> Position at products starting with PROD-0500 START PRODUCT-FILE KEY IS NOT LESS THAN START-KEY INVALID KEY DISPLAY "No products found starting at " START-KEY NOT INVALID KEY DISPLAY "Positioned at products >= " START-KEY PERFORM READ-PRODUCTS-FROM-POSITION END-START ELSE DISPLAY "ERROR: Cannot open file. Status: " FILE-STATUS-CODE END-IF CLOSE PRODUCT-FILE DISPLAY "Records processed: " RECORD-COUNT STOP RUN. READ-PRODUCTS-FROM-POSITION. PERFORM UNTIL FILE-STATUS-CODE = "10" READ PRODUCT-FILE NEXT RECORD AT END CONTINUE NOT AT END IF FILE-STATUS-CODE = "00" ADD 1 TO RECORD-COUNT DISPLAY "Product: " PRODUCT-CODE " " PRODUCT-NAME " $" PRODUCT-PRICE ELSE DISPLAY "Read error. Status: " FILE-STATUS-CODE EXIT PERFORM END-IF END-READ END-PERFORM.

Best Practices for START

  • Always handle INVALID KEY: Check for positioning failures
  • Check FILE STATUS: Verify successful positioning
  • Validate key values: Ensure keys are valid before START
  • Use appropriate operators: Choose EQUAL TO, GREATER THAN, or NOT LESS THAN based on needs
  • Use with READ NEXT: START positions, READ NEXT retrieves

Explain Like I'm 5: START

Think of START like using a bookmark:

  • START is like putting a bookmark at a specific page
  • READ NEXT is like reading from that bookmark forward
  • Key operators are like different ways to find the page (exact page, after page 50, etc.)

So START is like bookmarking a specific place in a file, then reading from there!

Test Your Knowledge

1. What does START do?

  • Reads a record
  • Positions the file at a specific key without reading
  • Opens a file
  • Closes a file

2. What file types can use START?

  • Sequential files only
  • Indexed and relative files
  • All file types
  • Only VSAM files

3. What key operators can you use with START?

  • Only EQUAL TO
  • EQUAL TO, GREATER THAN, NOT LESS THAN
  • Only GREATER THAN
  • No operators

4. What should you do if START doesn't find a match?

  • Continue anyway
  • Handle INVALID KEY condition
  • Read anyway
  • Close the file