MainframeMaster

COBOL Tutorial

COBOL LINE and LINES

The LINE and LINES keywords represent sophisticated line control and positioning mechanisms within COBOL programming environments, providing precise line positioning capabilities, comprehensive spacing control, and advanced pagination support that enable accurate document formatting, efficient page management, and reliable output positioning. These keywords embody advanced formatting principles by supporting absolute and relative line positioning, enabling sophisticated margin control, and facilitating comprehensive page layout requirements while maintaining consistent line spacing, ensuring precise output positioning, and enabling complex document generation scenarios across enterprise applications requiring detailed print control, automated line management, and reliable document formatting with optimized performance characteristics and consistent positioning standards.

LINE and LINES Syntax

Line Control Usage
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
*> LINAGE clause with LINES FD file-name LINAGE IS integer LINES WITH FOOTING AT integer LINES AT TOP integer LINES AT BOTTOM integer. *> Report Writer LINE positioning 01 report-group-name TYPE IS {PAGE-HEADING | CONTROL-HEADING | DETAIL | etc.} LINE IS {integer | PLUS integer | NEXT PAGE}. *> WRITE with line advancement WRITE record-name {BEFORE | AFTER} ADVANCING {integer LINES | PAGE}. *> Examples: FD PAYROLL-REPORT LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 3 LINES AT BOTTOM 3. 01 REPORT-HEADER TYPE IS PAGE-HEADING LINE IS 5. 01 DETAIL-LINE TYPE IS DETAIL LINE IS PLUS 1. WRITE EMPLOYEE-RECORD AFTER ADVANCING 2 LINES.
Line Control
Positioning
Formatting

Comprehensive LINE Examples

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
IDENTIFICATION DIVISION. PROGRAM-ID. LINE-CONTROL-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO "REPORT.TXT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-RPT-STATUS. SELECT INVOICE-FILE ASSIGN TO "INVOICE.TXT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-INV-STATUS. DATA DIVISION. FILE SECTION. *> File with LINAGE using LINES keyword FD REPORT-FILE LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 5 LINES AT BOTTOM 3. 01 REPORT-RECORD PIC X(132). *> Invoice file with different line settings FD INVOICE-FILE LINAGE IS 45 LINES WITH FOOTING AT 40 LINES AT TOP 3 LINES AT BOTTOM 2. 01 INVOICE-RECORD PIC X(80). WORKING-STORAGE SECTION. 01 WS-FILE-STATUS. 05 WS-RPT-STATUS PIC X(2). 05 WS-INV-STATUS PIC X(2). *> Line control variables 01 WS-LINE-CONTROL. 05 WS-CURRENT-LINE PIC 9(3) VALUE 1. 05 WS-TARGET-LINE PIC 9(3) VALUE 0. 05 WS-LINES-TO-ADVANCE PIC 9(2) VALUE 0. 05 WS-PAGE-SIZE PIC 9(2) VALUE 60. *> Line formatting examples 01 WS-REPORT-LINES. 05 WS-HEADER-LINE PIC X(132) VALUE " EMPLOYEE REPORT". 05 WS-SUBHEADER-LINE PIC X(132) VALUE " QUARTERLY SUMMARY". 05 WS-COLUMN-LINE PIC X(132) VALUE "EMP-ID NAME DEPT SALARY". 05 WS-SEPARATOR-LINE PIC X(132) VALUE ALL "-". 01 WS-DETAIL-LINE. 05 WS-EMP-ID PIC Z(6). 05 FILLER PIC X(4) VALUE SPACES. 05 WS-EMP-NAME PIC X(25). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-EMP-DEPT PIC X(10). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-EMP-SALARY PIC $,$$$,$$9.99. 05 FILLER PIC X(71) VALUE SPACES. *> Sample data 01 WS-SAMPLE-EMPLOYEES. 05 WS-EMP-TABLE OCCURS 10 TIMES. 10 WS-SAMPLE-ID PIC 9(6). 10 WS-SAMPLE-NAME PIC X(25). 10 WS-SAMPLE-DEPT PIC X(10). 10 WS-SAMPLE-SAL PIC 9(7)V99. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== LINE AND LINES DEMONSTRATION ===" DISPLAY SPACES PERFORM INITIALIZE-FILES PERFORM DEMONSTRATE-BASIC-LINE-CONTROL PERFORM DEMONSTRATE-ADVANCED-POSITIONING PERFORM DEMONSTRATE-LINE-SPACING PERFORM FINALIZE-FILES DISPLAY "=== LINE CONTROL DEMO COMPLETE ===" STOP RUN. INITIALIZE-FILES. DISPLAY "Initializing files with LINE control..." OPEN OUTPUT REPORT-FILE IF WS-RPT-STATUS NOT = "00" DISPLAY "Error opening report file: " WS-RPT-STATUS STOP RUN END-IF OPEN OUTPUT INVOICE-FILE IF WS-INV-STATUS NOT = "00" DISPLAY "Error opening invoice file: " WS-INV-STATUS STOP RUN END-IF PERFORM INITIALIZE-SAMPLE-DATA DISPLAY "Files opened with LINAGE settings:" DISPLAY " Report: 60 LINES, 5 AT TOP, 3 AT BOTTOM" DISPLAY " Invoice: 45 LINES, 3 AT TOP, 2 AT BOTTOM" DISPLAY SPACES. INITIALIZE-SAMPLE-DATA. MOVE 123456 TO WS-SAMPLE-ID(1) MOVE "JOHN SMITH" TO WS-SAMPLE-NAME(1) MOVE "SALES" TO WS-SAMPLE-DEPT(1) MOVE 55000.00 TO WS-SAMPLE-SAL(1) MOVE 234567 TO WS-SAMPLE-ID(2) MOVE "MARY JOHNSON" TO WS-SAMPLE-NAME(2) MOVE "MARKETING" TO WS-SAMPLE-DEPT(2) MOVE 62000.00 TO WS-SAMPLE-SAL(2) MOVE 345678 TO WS-SAMPLE-ID(3) MOVE "DAVID BROWN" TO WS-SAMPLE-NAME(3) MOVE "IT" TO WS-SAMPLE-DEPT(3) MOVE 72000.00 TO WS-SAMPLE-SAL(3). DEMONSTRATE-BASIC-LINE-CONTROL. DISPLAY "=== BASIC LINE CONTROL ===" DISPLAY SPACES PERFORM WRITE-HEADERS-WITH-SPACING PERFORM WRITE-DETAILS-WITH-LINES PERFORM DEMONSTRATE-LINE-ADVANCEMENT. WRITE-HEADERS-WITH-SPACING. DISPLAY "Writing headers with controlled line spacing..." *> Write main header WRITE REPORT-RECORD FROM WS-HEADER-LINE DISPLAY "Header written at line: " LINAGE-COUNTER OF REPORT-FILE *> Advance 2 lines for spacing WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINES WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINES DISPLAY "Spacing added, now at line: " LINAGE-COUNTER OF REPORT-FILE *> Write subheader WRITE REPORT-RECORD FROM WS-SUBHEADER-LINE DISPLAY "Subheader written at line: " LINAGE-COUNTER OF REPORT-FILE *> Single line advance WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINES *> Write column headers WRITE REPORT-RECORD FROM WS-COLUMN-LINE WRITE REPORT-RECORD FROM WS-SEPARATOR-LINE WRITE REPORT-RECORD FROM SPACES DISPLAY "Headers complete at line: " LINAGE-COUNTER OF REPORT-FILE DISPLAY SPACES. WRITE-DETAILS-WITH-LINES. 01 WS-EMP-INDEX PIC 9(2) VALUE 0. DISPLAY "Writing detail lines with line control..." PERFORM VARYING WS-EMP-INDEX FROM 1 BY 1 UNTIL WS-EMP-INDEX > 3 *> Format detail line MOVE WS-SAMPLE-ID(WS-EMP-INDEX) TO WS-EMP-ID MOVE WS-SAMPLE-NAME(WS-EMP-INDEX) TO WS-EMP-NAME MOVE WS-SAMPLE-DEPT(WS-EMP-INDEX) TO WS-EMP-DEPT MOVE WS-SAMPLE-SAL(WS-EMP-INDEX) TO WS-EMP-SALARY *> Write with single line advancement WRITE REPORT-RECORD FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINES DISPLAY "Employee " WS-EMP-INDEX " written at line: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Detail lines complete" DISPLAY SPACES. DEMONSTRATE-LINE-ADVANCEMENT. 01 WS-ADVANCE-TEST PIC X(132) VALUE "LINE ADVANCEMENT TEST". 01 WS-TEST-COUNT PIC 9(2) VALUE 0. DISPLAY "Demonstrating various line advancement options..." *> Test different advancement amounts PERFORM VARYING WS-TEST-COUNT FROM 1 BY 1 UNTIL WS-TEST-COUNT > 5 EVALUATE WS-TEST-COUNT WHEN 1 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST AFTER ADVANCING 1 LINES DISPLAY "Single line advance to: " LINAGE-COUNTER OF REPORT-FILE WHEN 2 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST AFTER ADVANCING 2 LINES DISPLAY "Double line advance to: " LINAGE-COUNTER OF REPORT-FILE WHEN 3 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST AFTER ADVANCING 3 LINES DISPLAY "Triple line advance to: " LINAGE-COUNTER OF REPORT-FILE WHEN 4 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST BEFORE ADVANCING 1 LINES DISPLAY "Before advancing to: " LINAGE-COUNTER OF REPORT-FILE WHEN 5 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST DISPLAY "No advancement specified, line: " LINAGE-COUNTER OF REPORT-FILE END-EVALUATE END-PERFORM DISPLAY "Line advancement tests complete" DISPLAY SPACES. DEMONSTRATE-ADVANCED-POSITIONING. DISPLAY "=== ADVANCED LINE POSITIONING ===" DISPLAY SPACES PERFORM CALCULATE-LINE-POSITIONS PERFORM DEMONSTRATE-CONDITIONAL-SPACING PERFORM SHOW-LINE-CALCULATION-METHODS. CALCULATE-LINE-POSITIONS. 01 WS-CALC-VARS. 05 WS-HEADER-LINE-POS PIC 9(2) VALUE 10. 05 WS-DETAIL-START-LINE PIC 9(2) VALUE 15. 05 WS-FOOTER-LINE-POS PIC 9(2) VALUE 55. 05 WS-AVAILABLE-LINES PIC 9(2). 05 WS-LINES-USED PIC 9(2). 01 WS-POSITION-MESSAGE PIC X(80). DISPLAY "Calculating optimal line positions..." COMPUTE WS-AVAILABLE-LINES = WS-FOOTER-LINE-POS - WS-DETAIL-START-LINE MOVE LINAGE-COUNTER OF REPORT-FILE TO WS-LINES-USED DISPLAY " Current position: " WS-LINES-USED DISPLAY " Header line target: " WS-HEADER-LINE-POS DISPLAY " Detail area start: " WS-DETAIL-START-LINE DISPLAY " Footer line target: " WS-FOOTER-LINE-POS DISPLAY " Available detail lines: " WS-AVAILABLE-LINES IF WS-LINES-USED < WS-HEADER-LINE-POS MOVE "POSITION BEFORE HEADER AREA" TO WS-POSITION-MESSAGE ELSE IF WS-LINES-USED < WS-DETAIL-START-LINE MOVE "POSITION IN HEADER AREA" TO WS-POSITION-MESSAGE ELSE IF WS-LINES-USED < WS-FOOTER-LINE-POS MOVE "POSITION IN DETAIL AREA" TO WS-POSITION-MESSAGE ELSE MOVE "POSITION IN FOOTER AREA" TO WS-POSITION-MESSAGE END-IF END-IF END-IF DISPLAY " Current area: " WS-POSITION-MESSAGE DISPLAY SPACES. DEMONSTRATE-CONDITIONAL-SPACING. 01 WS-SPACING-VARS. 05 WS-SECTION-TYPE PIC X(10). 05 WS-LINES-BEFORE PIC 9(2). 05 WS-LINES-AFTER PIC 9(2). 05 WS-SPACING-MESSAGE PIC X(60). 01 WS-SECTION-CONTENT PIC X(132). 01 WS-SECTION-COUNT PIC 9(2) VALUE 0. DISPLAY "Demonstrating conditional line spacing..." PERFORM VARYING WS-SECTION-COUNT FROM 1 BY 1 UNTIL WS-SECTION-COUNT > 3 EVALUATE WS-SECTION-COUNT WHEN 1 MOVE "SUMMARY" TO WS-SECTION-TYPE MOVE 2 TO WS-LINES-BEFORE MOVE 1 TO WS-LINES-AFTER WHEN 2 MOVE "DETAIL" TO WS-SECTION-TYPE MOVE 1 TO WS-LINES-BEFORE MOVE 1 TO WS-LINES-AFTER WHEN 3 MOVE "TOTAL" TO WS-SECTION-TYPE MOVE 3 TO WS-LINES-BEFORE MOVE 2 TO WS-LINES-AFTER END-EVALUATE *> Apply spacing before section PERFORM VARYING WS-LINES-TO-ADVANCE FROM 1 BY 1 UNTIL WS-LINES-TO-ADVANCE > WS-LINES-BEFORE WRITE REPORT-RECORD FROM SPACES END-PERFORM *> Write section content MOVE WS-SECTION-TYPE TO WS-SECTION-CONTENT WRITE REPORT-RECORD FROM WS-SECTION-CONTENT *> Apply spacing after section PERFORM VARYING WS-LINES-TO-ADVANCE FROM 1 BY 1 UNTIL WS-LINES-TO-ADVANCE > WS-LINES-AFTER WRITE REPORT-RECORD FROM SPACES END-PERFORM DISPLAY "Section " WS-SECTION-TYPE " positioned with " WS-LINES-BEFORE " lines before, " WS-LINES-AFTER " lines after" DISPLAY " Now at line: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Conditional spacing complete" DISPLAY SPACES. SHOW-LINE-CALCULATION-METHODS. 01 WS-CALC-METHODS. 05 WS-ABSOLUTE-LINE PIC 9(2) VALUE 45. 05 WS-RELATIVE-OFFSET PIC 9(2) VALUE 5. 05 WS-CALCULATED-POS PIC 9(2). 05 WS-PERCENTAGE-POS PIC 9(2). 01 WS-METHOD-LINE PIC X(132). DISPLAY "Line calculation methods:" *> Absolute positioning MOVE WS-ABSOLUTE-LINE TO WS-CALCULATED-POS MOVE "ABSOLUTE POSITIONING EXAMPLE" TO WS-METHOD-LINE DISPLAY " Absolute line " WS-ABSOLUTE-LINE " target" *> Relative positioning COMPUTE WS-CALCULATED-POS = LINAGE-COUNTER OF REPORT-FILE + WS-RELATIVE-OFFSET MOVE "RELATIVE POSITIONING EXAMPLE" TO WS-METHOD-LINE DISPLAY " Relative: current " LINAGE-COUNTER OF REPORT-FILE " + " WS-RELATIVE-OFFSET " = " WS-CALCULATED-POS *> Percentage-based positioning COMPUTE WS-PERCENTAGE-POS = (WS-PAGE-SIZE * 75) / 100 MOVE "PERCENTAGE POSITIONING EXAMPLE" TO WS-METHOD-LINE DISPLAY " Percentage: 75% of " WS-PAGE-SIZE " = " WS-PERCENTAGE-POS DISPLAY "Line calculation methods demonstrated" DISPLAY SPACES. DEMONSTRATE-LINE-SPACING. DISPLAY "=== LINE SPACING PATTERNS ===" DISPLAY SPACES PERFORM SINGLE-LINE-SPACING PERFORM DOUBLE-LINE-SPACING PERFORM CUSTOM-LINE-SPACING. SINGLE-LINE-SPACING. 01 WS-SINGLE-COUNT PIC 9(2) VALUE 0. 01 WS-SINGLE-LINE PIC X(132) VALUE "SINGLE SPACED LINE". DISPLAY "Single line spacing example..." PERFORM VARYING WS-SINGLE-COUNT FROM 1 BY 1 UNTIL WS-SINGLE-COUNT > 3 WRITE REPORT-RECORD FROM WS-SINGLE-LINE AFTER ADVANCING 1 LINES DISPLAY " Single line " WS-SINGLE-COUNT " at position: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY SPACES. DOUBLE-LINE-SPACING. 01 WS-DOUBLE-COUNT PIC 9(2) VALUE 0. 01 WS-DOUBLE-LINE PIC X(132) VALUE "DOUBLE SPACED LINE". DISPLAY "Double line spacing example..." PERFORM VARYING WS-DOUBLE-COUNT FROM 1 BY 1 UNTIL WS-DOUBLE-COUNT > 3 WRITE REPORT-RECORD FROM WS-DOUBLE-LINE AFTER ADVANCING 2 LINES DISPLAY " Double line " WS-DOUBLE-COUNT " at position: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY SPACES. CUSTOM-LINE-SPACING. 01 WS-CUSTOM-VARS. 05 WS-CUSTOM-COUNT PIC 9(2) VALUE 0. 05 WS-SPACING-PATTERN PIC 9(2). 01 WS-CUSTOM-LINE PIC X(132) VALUE "CUSTOM SPACED LINE". DISPLAY "Custom line spacing patterns..." PERFORM VARYING WS-CUSTOM-COUNT FROM 1 BY 1 UNTIL WS-CUSTOM-COUNT > 4 *> Vary spacing pattern: 1, 2, 3, 1 COMPUTE WS-SPACING-PATTERN = FUNCTION MOD(WS-CUSTOM-COUNT - 1, 3) + 1 WRITE REPORT-RECORD FROM WS-CUSTOM-LINE AFTER ADVANCING WS-SPACING-PATTERN LINES DISPLAY " Custom line " WS-CUSTOM-COUNT " with " WS-SPACING-PATTERN " line spacing" DISPLAY " Position: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Custom spacing complete" DISPLAY SPACES. FINALIZE-FILES. DISPLAY "=== FINALIZING LINE CONTROL DEMO ===" DISPLAY SPACES PERFORM WRITE-FINAL-SUMMARY PERFORM CLOSE-ALL-FILES. WRITE-FINAL-SUMMARY. 01 WS-FINAL-SUMMARY. 05 WS-SUMMARY-HEADER PIC X(132) VALUE " FINAL LINE POSITION SUMMARY". 05 WS-SUMMARY-LINE PIC X(132). 01 WS-FINAL-POSITION PIC 9(3). MOVE LINAGE-COUNTER OF REPORT-FILE TO WS-FINAL-POSITION WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 3 LINES WRITE REPORT-RECORD FROM WS-SUMMARY-HEADER WRITE REPORT-RECORD FROM SPACES MOVE "TOTAL LINES WRITTEN: " TO WS-SUMMARY-LINE(1:19) MOVE WS-FINAL-POSITION TO WS-SUMMARY-LINE(20:3) WRITE REPORT-RECORD FROM WS-SUMMARY-LINE DISPLAY "Final summary written" DISPLAY " Report final position: " WS-FINAL-POSITION DISPLAY " Invoice final position: " LINAGE-COUNTER OF INVOICE-FILE DISPLAY SPACES. CLOSE-ALL-FILES. CLOSE REPORT-FILE CLOSE INVOICE-FILE DISPLAY "All files closed successfully" DISPLAY "LINE and LINES demonstration completed".

LINE and LINES Applications

LINAGE Usage
  • • Page size specification (LINES)
  • • Margin control (LINES AT TOP/BOTTOM)
  • • Footing area definition
  • • Automatic page management
WRITE Operations
  • • Line advancement control
  • • Spacing customization
  • • Position management
  • • Output formatting

Interactive Tutorial

Hands-On Exercise: Line Control Techniques
Practice using LINE and LINES for precise output formatting

Exercise 1: LINAGE with LINES

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
FD FORMATTED-REPORT LINAGE IS 50 LINES WITH FOOTING AT 45 LINES AT TOP 2 LINES AT BOTTOM 3. 01 FORMATTED-LINE PIC X(100). 01 WS-LINE-SPACING. 05 WS-HEADER-SPACING PIC 9(2) VALUE 2. 05 WS-DETAIL-SPACING PIC 9(2) VALUE 1. 05 WS-SECTION-SPACING PIC 9(2) VALUE 3. PROCEDURE DIVISION. FORMAT-WITH-LINES. OPEN OUTPUT FORMATTED-REPORT *> Write header with controlled spacing MOVE "REPORT TITLE" TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-HEADER-SPACING LINES *> Write details with single spacing PERFORM 10 TIMES MOVE "DETAIL LINE" TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-DETAIL-SPACING LINES END-PERFORM *> Write section break MOVE "SECTION BREAK" TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-SECTION-SPACING LINES.

Exercise 2: Variable Line Spacing

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
01 WS-SPACING-CONTROL. 05 WS-CURRENT-SECTION PIC X(10). 05 WS-LINES-NEEDED PIC 9(2). 05 WS-SPACING-AMOUNT PIC 9(2). 01 WS-SECTION-DATA. 05 WS-SECTION-NAMES OCCURS 3 TIMES PIC X(10). 05 WS-SECTION-SPACING OCCURS 3 TIMES PIC 9(2). PROCEDURE DIVISION. VARIABLE-SPACING-EXAMPLE. *> Initialize section spacing rules MOVE "HEADER" TO WS-SECTION-NAMES(1) MOVE 3 TO WS-SECTION-SPACING(1) MOVE "BODY" TO WS-SECTION-NAMES(2) MOVE 1 TO WS-SECTION-SPACING(2) MOVE "FOOTER" TO WS-SECTION-NAMES(3) MOVE 2 TO WS-SECTION-SPACING(3) *> Apply variable spacing PERFORM VARYING WS-CURRENT-SECTION FROM 1 BY 1 UNTIL WS-CURRENT-SECTION > 3 MOVE WS-SECTION-SPACING(WS-CURRENT-SECTION) TO WS-SPACING-AMOUNT MOVE WS-SECTION-NAMES(WS-CURRENT-SECTION) TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-SPACING-AMOUNT LINES DISPLAY "Section " WS-SECTION-NAMES(WS-CURRENT-SECTION) " with " WS-SPACING-AMOUNT " line spacing" END-PERFORM.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: LINAGE Usage

How are LINE and LINES used in LINAGE clauses?

Answer: LINES specifies quantities (LINAGE IS 60 LINES, LINES AT TOP 3), while LINE would be used for absolute positioning. LINAGE controls page size and margins using LINES keyword for quantities.

Question 2: WRITE Advancement

What's the difference between BEFORE and AFTER ADVANCING with LINES?

Answer: BEFORE ADVANCING moves the paper before writing the record, while AFTER ADVANCING moves the paper after writing. AFTER ADVANCING is more common and moves to the next line(s) after printing.

Question 3: Line Control Applications

What are practical applications of LINE and LINES control?

Answer: Applications include: report formatting with consistent spacing, invoice generation with proper margins, form printing with precise positioning, and multi-section documents with controlled line breaks.