MainframeMaster

COBOL Tutorial

COBOL PIC and PICTURE

The PIC and PICTURE clauses in COBOL represent comprehensive data definition and sophisticated formatting specification capabilities within enterprise programming environments, providing advanced data structure mechanisms for precise data layout control, enhanced formatting capabilities for professional display requirements, and intelligent data type specification features that enable accurate data storage, optimal memory utilization, and systematic formatting workflows while maintaining data integrity, ensuring proper display presentation, and enabling flexible data architectures across business applications requiring exact data specifications, formatted output generation, and reliable data handling throughout sophisticated enterprise data processing scenarios and professional reporting requirements.

Basic PICTURE Symbols

Fundamental PICTURE Character 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
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
*> Basic PICTURE symbols and data definitions 01 WS-BASIC-DATA-TYPES. *> Numeric data definitions 05 WS-INTEGER-VALUE PIC 9(5). *> 5-digit integer 05 WS-DECIMAL-VALUE PIC 9(3)V99. *> 3 digits, 2 decimal places 05 WS-SIGNED-VALUE PIC S9(4). *> Signed 4-digit number 05 WS-LARGE-NUMBER PIC 9(10)V999. *> Large number with decimals *> Alphanumeric data definitions 05 WS-CHARACTER-FIELD PIC X(30). *> 30-character field 05 WS-MIXED-DATA PIC X(50). *> Mixed alphanumeric data 05 WS-SHORT-TEXT PIC X(10). *> Short text field *> Alphabetic data definitions 05 WS-NAME-FIELD PIC A(25). *> Alphabetic characters only 05 WS-TITLE-FIELD PIC A(15). *> Title or designation *> Edited numeric definitions (display formatting) 05 WS-CURRENCY-DISPLAY PIC $9,999.99. *> Currency with formatting 05 WS-PERCENTAGE-DISP PIC 999.99%. *> Percentage display 05 WS-PHONE-NUMBER PIC 999-999-9999. *> Phone number format *> Demonstration of different PICTURE uses PROCEDURE DIVISION. DEMONSTRATE-PICTURE-USAGE. *> Working with numeric PICTURE MOVE 12345 TO WS-INTEGER-VALUE DISPLAY "Integer value: " WS-INTEGER-VALUE MOVE 123.45 TO WS-DECIMAL-VALUE DISPLAY "Decimal value: " WS-DECIMAL-VALUE MOVE -9999 TO WS-SIGNED-VALUE DISPLAY "Signed value: " WS-SIGNED-VALUE *> Working with alphanumeric PICTURE MOVE "CUSTOMER DATA RECORD" TO WS-CHARACTER-FIELD DISPLAY "Character field: " WS-CHARACTER-FIELD MOVE "ABC123XYZ" TO WS-MIXED-DATA DISPLAY "Mixed data: " WS-MIXED-DATA *> Working with alphabetic PICTURE MOVE "JOHN DOE" TO WS-NAME-FIELD DISPLAY "Name field: " WS-NAME-FIELD *> Working with edited PICTURE (formatting) MOVE 1234.56 TO WS-CURRENCY-DISPLAY DISPLAY "Currency display: " WS-CURRENCY-DISPLAY MOVE 87.50 TO WS-PERCENTAGE-DISP DISPLAY "Percentage: " WS-PERCENTAGE-DISP MOVE "5551234567" TO WS-PHONE-NUMBER DISPLAY "Phone number: " WS-PHONE-NUMBER *> Advanced PICTURE symbol combinations 01 WS-ADVANCED-PICTURES. *> Repetition factors 05 WS-ACCOUNT-NUMBER PIC 9(8). *> Same as 99999999 05 WS-DESCRIPTION PIC X(100). *> Same as 100 X's 05 WS-AMOUNT-FIELD PIC 9(6)V99. *> Same as 999999V99 *> Multiple character types 05 WS-PRODUCT-CODE PIC XX9999. *> 2 chars + 4 digits 05 WS-SERIAL-NUMBER PIC A999X999. *> Alpha + num + char + num 05 WS-REFERENCE-ID PIC X9X9X9. *> Alternating pattern *> Implicit decimal positioning 05 WS-PRICE-INTERNAL PIC 9(5)V99. *> Internal: 1234567 = 12345.67 05 WS-RATE-CALCULATION PIC 9V9999. *> Rate: 12345 = 1.2345 05 WS-PERCENTAGE-CALC PIC 99V999. *> Percent: 12345 = 12.345 DEMONSTRATE-ADVANCED-PICTURES. *> Working with repetition factors MOVE 12345678 TO WS-ACCOUNT-NUMBER DISPLAY "Account: " WS-ACCOUNT-NUMBER *> Working with mixed character types MOVE "AB1234" TO WS-PRODUCT-CODE DISPLAY "Product code: " WS-PRODUCT-CODE MOVE "A123B456" TO WS-SERIAL-NUMBER DISPLAY "Serial number: " WS-SERIAL-NUMBER *> Working with implicit decimals MOVE 1234567 TO WS-PRICE-INTERNAL DISPLAY "Price (internal): " WS-PRICE-INTERNAL *> The V doesn't take storage - it's positional DISPLAY "Storage length of price field: " FUNCTION LENGTH(WS-PRICE-INTERNAL) *> PICTURE validation and constraints 01 WS-VALIDATION-EXAMPLES. 05 WS-NUMERIC-ONLY PIC 9(6). *> Only accepts digits 05 WS-ALPHA-ONLY PIC A(20). *> Only accepts letters 05 WS-MIXED-CONTENT PIC X(30). *> Accepts any characters 05 WS-SIGNED-AMOUNT PIC S9(8)V99. *> Signed with decimals DEMONSTRATE-PICTURE-VALIDATION. *> Valid assignments MOVE 123456 TO WS-NUMERIC-ONLY MOVE "JOHN SMITH" TO WS-ALPHA-ONLY MOVE "ABC123!@#" TO WS-MIXED-CONTENT MOVE -12345.67 TO WS-SIGNED-AMOUNT DISPLAY "Valid data assignments completed" DISPLAY "Numeric: " WS-NUMERIC-ONLY DISPLAY "Alpha: " WS-ALPHA-ONLY DISPLAY "Mixed: " WS-MIXED-CONTENT DISPLAY "Signed: " WS-SIGNED-AMOUNT
Data Definition
Format Specification
Character Types

PICTURE Editing Characters

Comprehensive Editing and Formatting
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
*> PICTURE editing characters for formatting 01 WS-EDITING-EXAMPLES. *> Currency and monetary formatting 05 WS-DOLLAR-FIXED PIC $999.99. *> Fixed dollar sign 05 WS-DOLLAR-FLOATING PIC $$$9.99. *> Floating dollar sign 05 WS-EURO-AMOUNT PIC €999.99. *> Euro currency 05 WS-POUND-AMOUNT PIC £999.99. *> British pound *> Zero suppression formatting 05 WS-ZERO-SUPPRESS PIC ZZZ9. *> Leading zero suppression 05 WS-COMMA-SUPPRESS PIC Z,ZZZ.99. *> Comma with suppression 05 WS-FULL-SUPPRESS PIC ZZZZ. *> Complete suppression *> Asterisk fill (check protection) 05 WS-CHECK-AMOUNT PIC $*,***.** *> Check protection 05 WS-PROTECTED-TOTAL PIC **,**9.99. *> Asterisk fill *> Sign editing 05 WS-PLUS-MINUS PIC +999.99. *> Plus/minus sign 05 WS-CREDIT-DEBIT PIC 999.99CR. *> Credit/debit notation 05 WS-DEBIT-BALANCE PIC 999.99DB. *> Debit notation 05 WS-FLOATING-SIGN PIC ---9.99. *> Floating minus *> Special formatting 05 WS-PERCENTAGE PIC ZZ9.99%. *> Percentage formatting 05 WS-DATE-FORMATTED PIC 99/99/9999. *> Date formatting 05 WS-TIME-FORMATTED PIC 99:99:99. *> Time formatting 05 WS-BLANK-ZERO PIC BZZZ9. *> Blank when zero *> Demonstration of editing character usage DEMONSTRATE-EDITING-CHARACTERS. DISPLAY "=== PICTURE EDITING DEMONSTRATION ===" *> Currency formatting examples MOVE 123.45 TO WS-DOLLAR-FIXED DISPLAY "Fixed dollar: " WS-DOLLAR-FIXED MOVE 67.89 TO WS-DOLLAR-FLOATING DISPLAY "Floating dollar: " WS-DOLLAR-FLOATING MOVE 1234.56 TO WS-EURO-AMOUNT DISPLAY "Euro amount: " WS-EURO-AMOUNT *> Zero suppression examples MOVE 45 TO WS-ZERO-SUPPRESS DISPLAY "Zero suppressed: " WS-ZERO-SUPPRESS MOVE 1234.56 TO WS-COMMA-SUPPRESS DISPLAY "Comma suppression: " WS-COMMA-SUPPRESS MOVE 0 TO WS-FULL-SUPPRESS DISPLAY "Full suppression: " WS-FULL-SUPPRESS *> Check protection examples MOVE 1234.56 TO WS-CHECK-AMOUNT DISPLAY "Check amount: " WS-CHECK-AMOUNT MOVE 789.12 TO WS-PROTECTED-TOTAL DISPLAY "Protected total: " WS-PROTECTED-TOTAL *> Sign editing examples MOVE +123.45 TO WS-PLUS-MINUS DISPLAY "Plus/minus: " WS-PLUS-MINUS MOVE -123.45 TO WS-PLUS-MINUS DISPLAY "Negative: " WS-PLUS-MINUS MOVE 567.89 TO WS-CREDIT-DEBIT DISPLAY "Credit notation: " WS-CREDIT-DEBIT *> Special formatting examples MOVE 87.50 TO WS-PERCENTAGE DISPLAY "Percentage: " WS-PERCENTAGE MOVE "12252023" TO WS-DATE-FORMATTED DISPLAY "Date formatted: " WS-DATE-FORMATTED MOVE "143045" TO WS-TIME-FORMATTED DISPLAY "Time formatted: " WS-TIME-FORMATTED *> Complex editing combinations 01 WS-COMPLEX-EDITING. *> Multi-character editing patterns 05 WS-FINANCIAL-REPORT PIC $***,**9.99CR. *> Complete financial format 05 WS-STATISTICAL-DATA PIC ZZZ,ZZ9.999%. *> Statistical percentage 05 WS-ACCOUNTING-ENTRY PIC +$ZZ,ZZ9.99. *> Accounting format 05 WS-INVOICE-TOTAL PIC $Z,ZZZ,ZZ9.99. *> Invoice formatting *> Literal insertion 05 WS-LITERAL-EXAMPLE PIC X(5)"TOTAL"X(10). *> Literal text insertion 05 WS-PHONE-FORMAT PIC 999B999B9999. *> Spaces in phone number 05 WS-SSN-FORMAT PIC 999-99-9999. *> Social security format *> Repeated editing characters 05 WS-LARGE-CURRENCY PIC $,$$$,$$$,$$9.99. *> Large amount formatting 05 WS-MULTIPLE-ZEROS PIC ZZZZZZ9. *> Multiple zero suppression 05 WS-ASTERISK-FIELD PIC ******9. *> Multiple asterisk fill DEMONSTRATE-COMPLEX-EDITING. DISPLAY " " DISPLAY "=== COMPLEX EDITING DEMONSTRATION ===" *> Financial reporting formats MOVE 12345.67 TO WS-FINANCIAL-REPORT DISPLAY "Financial report: " WS-FINANCIAL-REPORT MOVE 456.789 TO WS-STATISTICAL-DATA DISPLAY "Statistical data: " WS-STATISTICAL-DATA MOVE 7890.12 TO WS-ACCOUNTING-ENTRY DISPLAY "Accounting entry: " WS-ACCOUNTING-ENTRY MOVE 1234567.89 TO WS-INVOICE-TOTAL DISPLAY "Invoice total: " WS-INVOICE-TOTAL *> Literal insertion examples MOVE "MONTHOCTOBER" TO WS-LITERAL-EXAMPLE DISPLAY "Literal example: " WS-LITERAL-EXAMPLE MOVE "1234567890" TO WS-PHONE-FORMAT DISPLAY "Phone format: " WS-PHONE-FORMAT MOVE "123456789" TO WS-SSN-FORMAT DISPLAY "SSN format: " WS-SSN-FORMAT *> Large number formatting MOVE 9876543.21 TO WS-LARGE-CURRENCY DISPLAY "Large currency: " WS-LARGE-CURRENCY *> PICTURE with REDEFINES for multiple formats 01 WS-AMOUNT-DATA. 05 WS-AMOUNT-NUMERIC PIC 9(7)V99. 05 WS-AMOUNT-DISPLAY REDEFINES WS-AMOUNT-NUMERIC. 10 WS-AMOUNT-DOLLARS PIC 9(7). 10 WS-AMOUNT-CENTS PIC 99. 01 WS-AMOUNT-FORMATTED PIC $ZZZ,ZZ9.99. DEMONSTRATE-REDEFINES-PICTURE. DISPLAY " " DISPLAY "=== PICTURE WITH REDEFINES ===" MOVE 1234567.89 TO WS-AMOUNT-NUMERIC DISPLAY "Numeric amount: " WS-AMOUNT-NUMERIC DISPLAY "Dollars part: " WS-AMOUNT-DOLLARS DISPLAY "Cents part: " WS-AMOUNT-CENTS MOVE WS-AMOUNT-NUMERIC TO WS-AMOUNT-FORMATTED DISPLAY "Formatted amount: " WS-AMOUNT-FORMATTED

Complete PICTURE System Implementation

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
IDENTIFICATION DIVISION. PROGRAM-ID. PICTURE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Comprehensive PICTURE demonstration system 01 WS-EMPLOYEE-MASTER-RECORD. 05 WS-EMP-ID PIC X(8). *> Employee ID 05 WS-EMP-NAME. 10 WS-LAST-NAME PIC A(20). *> Last name - alphabetic 10 WS-FIRST-NAME PIC A(15). *> First name - alphabetic 10 WS-MIDDLE-INITIAL PIC A. *> Middle initial 05 WS-EMP-ADDRESS. 10 WS-STREET-NUMBER PIC 9(5). *> Street number 10 WS-STREET-NAME PIC X(30). *> Street name 10 WS-CITY PIC A(20). *> City name 10 WS-STATE PIC AA. *> State code 10 WS-ZIP-CODE PIC 9(5). *> ZIP code 05 WS-EMP-PHONE PIC X(10). *> Phone storage 05 WS-EMP-SALARY PIC 9(6)V99. *> Annual salary 05 WS-EMP-HIRE-DATE. 10 WS-HIRE-YEAR PIC 9(4). *> Year 10 WS-HIRE-MONTH PIC 99. *> Month 10 WS-HIRE-DAY PIC 99. *> Day *> Display formatting fields 01 WS-DISPLAY-FORMATS. 05 WS-SALARY-DISPLAY PIC $ZZZ,ZZ9.99. *> Salary display 05 WS-PHONE-DISPLAY PIC 999-999-9999. *> Phone display 05 WS-DATE-DISPLAY PIC 99/99/9999. *> Date display 05 WS-NAME-DISPLAY PIC X(50). *> Full name display 05 WS-ADDRESS-DISPLAY PIC X(100). *> Full address display *> Financial calculation fields 01 WS-FINANCIAL-CALCULATIONS. 05 WS-MONTHLY-GROSS PIC 9(5)V99. *> Monthly gross pay 05 WS-FEDERAL-TAX PIC 9(4)V99. *> Federal tax 05 WS-STATE-TAX PIC 9(4)V99. *> State tax 05 WS-FICA-TAX PIC 9(4)V99. *> FICA tax 05 WS-INSURANCE PIC 9(3)V99. *> Insurance deduction 05 WS-NET-PAY PIC 9(5)V99. *> Net pay *> Financial display fields 01 WS-FINANCIAL-DISPLAYS. 05 WS-GROSS-DISPLAY PIC $ZZ,ZZ9.99. *> Gross pay display 05 WS-FED-TAX-DISPLAY PIC $Z,ZZ9.99. *> Federal tax display 05 WS-STATE-TAX-DISPLAY PIC $Z,ZZ9.99. *> State tax display 05 WS-FICA-DISPLAY PIC $Z,ZZ9.99. *> FICA display 05 WS-INSURANCE-DISPLAY PIC $ZZ9.99. *> Insurance display 05 WS-NET-DISPLAY PIC $ZZ,ZZ9.99. *> Net pay display *> Report formatting structures 01 WS-PAYROLL-REPORT. 05 WS-REPORT-HEADER. 10 FILLER PIC X(30) VALUE SPACES. 10 FILLER PIC X(20) VALUE "PAYROLL REPORT". 10 FILLER PIC X(30) VALUE SPACES. 05 WS-COLUMN-HEADERS. 10 FILLER PIC X(10) VALUE "EMPLOYEE". 10 FILLER PIC X(25) VALUE "NAME". 10 FILLER PIC X(12) VALUE "GROSS PAY". 10 FILLER PIC X(12) VALUE "DEDUCTIONS". 10 FILLER PIC X(11) VALUE "NET PAY". 05 WS-DETAIL-LINE. 10 WS-DETAIL-ID PIC X(8). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DETAIL-NAME PIC X(25). 10 WS-DETAIL-GROSS PIC $ZZ,ZZ9.99. 10 FILLER PIC X(1) VALUE SPACE. 10 WS-DETAIL-DEDUCT PIC $Z,ZZ9.99. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DETAIL-NET PIC $Z,ZZ9.99. *> Statistical analysis fields 01 WS-DEPARTMENT-STATISTICS. 05 WS-DEPT-TOTALS OCCURS 10 TIMES. 10 WS-DEPT-CODE PIC X(3). *> Department code 10 WS-DEPT-NAME PIC A(20). *> Department name 10 WS-EMPLOYEE-COUNT PIC 9(3). *> Employee count 10 WS-TOTAL-PAYROLL PIC 9(8)V99. *> Total payroll 10 WS-AVG-SALARY PIC 9(6)V99. *> Average salary 10 WS-MIN-SALARY PIC 9(6)V99. *> Minimum salary 10 WS-MAX-SALARY PIC 9(6)V99. *> Maximum salary *> Statistical display fields 01 WS-STATISTICS-DISPLAY. 05 WS-STAT-HEADERS. 10 FILLER PIC X(5) VALUE "DEPT". 10 FILLER PIC X(20) VALUE "DEPARTMENT NAME". 10 FILLER PIC X(8) VALUE "EMPS". 10 FILLER PIC X(15) VALUE "TOTAL PAYROLL". 10 FILLER PIC X(12) VALUE "AVG SALARY". 05 WS-STAT-DETAIL. 10 WS-STAT-CODE PIC X(3). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-STAT-NAME PIC A(20). 10 WS-STAT-COUNT PIC ZZ9. 10 FILLER PIC X(5) VALUE SPACES. 10 WS-STAT-TOTAL PIC $ZZZ,ZZ9.99. 10 FILLER PIC X(1) VALUE SPACE. 10 WS-STAT-AVERAGE PIC $ZZ,ZZ9.99. PROCEDURE DIVISION. MAIN-PICTURE-DEMO. DISPLAY "=== COMPREHENSIVE PICTURE DEMONSTRATION ===" PERFORM LOAD-SAMPLE-DATA PERFORM DEMONSTRATE-BASIC-PICTURES PERFORM DEMONSTRATE-DISPLAY-FORMATTING PERFORM CALCULATE-PAYROLL-DATA PERFORM GENERATE-FORMATTED-REPORTS PERFORM ANALYZE-DEPARTMENT-STATISTICS PERFORM DISPLAY-FINAL-SUMMARY DISPLAY "=== PICTURE DEMO COMPLETE ===" STOP RUN. *> ========================================== *> SAMPLE DATA LOADING WITH VARIOUS PICTURES *> ========================================== LOAD-SAMPLE-DATA. DISPLAY "Loading sample employee data..." *> Employee 1 data MOVE "EMP00001" TO WS-EMP-ID MOVE "JOHNSON" TO WS-LAST-NAME MOVE "ROBERT" TO WS-FIRST-NAME MOVE "M" TO WS-MIDDLE-INITIAL MOVE 1234 TO WS-STREET-NUMBER MOVE "MAIN STREET" TO WS-STREET-NAME MOVE "CHICAGO" TO WS-CITY MOVE "IL" TO WS-STATE MOVE 60601 TO WS-ZIP-CODE MOVE "3125551234" TO WS-EMP-PHONE MOVE 75000.00 TO WS-EMP-SALARY MOVE 2020 TO WS-HIRE-YEAR MOVE 06 TO WS-HIRE-MONTH MOVE 15 TO WS-HIRE-DAY DISPLAY "✅ Sample employee data loaded" DISPLAY " Employee ID: " WS-EMP-ID DISPLAY " Last Name: " WS-LAST-NAME DISPLAY " First Name: " WS-FIRST-NAME DISPLAY " Annual Salary: " WS-EMP-SALARY. DEMONSTRATE-BASIC-PICTURES. DISPLAY " " DISPLAY "=== BASIC PICTURE DEMONSTRATIONS ===" *> Numeric PICTURE demonstrations DISPLAY "Numeric PICTURE examples:" DISPLAY " Employee ID (X(8)): " WS-EMP-ID DISPLAY " Street Number (9(5)): " WS-STREET-NUMBER DISPLAY " ZIP Code (9(5)): " WS-ZIP-CODE DISPLAY " Salary (9(6)V99): " WS-EMP-SALARY DISPLAY " Hire Year (9(4)): " WS-HIRE-YEAR *> Alphabetic PICTURE demonstrations DISPLAY " " DISPLAY "Alphabetic PICTURE examples:" DISPLAY " Last Name (A(20)): " WS-LAST-NAME DISPLAY " First Name (A(15)): " WS-FIRST-NAME DISPLAY " Middle Initial (A): " WS-MIDDLE-INITIAL DISPLAY " City (A(20)): " WS-CITY DISPLAY " State (AA): " WS-STATE *> Alphanumeric PICTURE demonstrations DISPLAY " " DISPLAY "Alphanumeric PICTURE examples:" DISPLAY " Street Name (X(30)): " WS-STREET-NAME DISPLAY " Phone (X(10)): " WS-EMP-PHONE. DEMONSTRATE-DISPLAY-FORMATTING. DISPLAY " " DISPLAY "=== DISPLAY FORMATTING WITH EDITING ===" *> Format salary for display MOVE WS-EMP-SALARY TO WS-SALARY-DISPLAY DISPLAY "Formatted Salary: " WS-SALARY-DISPLAY *> Format phone number for display MOVE WS-EMP-PHONE TO WS-PHONE-DISPLAY DISPLAY "Formatted Phone: " WS-PHONE-DISPLAY *> Format hire date for display STRING WS-HIRE-MONTH "/" WS-HIRE-DAY "/" WS-HIRE-YEAR DELIMITED BY SIZE INTO WS-DATE-DISPLAY END-STRING DISPLAY "Formatted Date: " WS-DATE-DISPLAY *> Format full name for display STRING WS-FIRST-NAME " " WS-MIDDLE-INITIAL ". " WS-LAST-NAME DELIMITED BY SIZE INTO WS-NAME-DISPLAY END-STRING DISPLAY "Formatted Name: " WS-NAME-DISPLAY *> Format full address for display STRING WS-STREET-NUMBER " " WS-STREET-NAME ", " WS-CITY ", " WS-STATE " " WS-ZIP-CODE DELIMITED BY SIZE INTO WS-ADDRESS-DISPLAY END-STRING DISPLAY "Formatted Address: " WS-ADDRESS-DISPLAY. *> ========================================== *> PAYROLL CALCULATIONS WITH PICTURE EDITING *> ========================================== CALCULATE-PAYROLL-DATA. DISPLAY " " DISPLAY "=== PAYROLL CALCULATIONS ===" *> Calculate monthly gross pay COMPUTE WS-MONTHLY-GROSS = WS-EMP-SALARY / 12 *> Calculate deductions using precise PICTURE definitions COMPUTE WS-FEDERAL-TAX = WS-MONTHLY-GROSS * 0.20 COMPUTE WS-STATE-TAX = WS-MONTHLY-GROSS * 0.05 COMPUTE WS-FICA-TAX = WS-MONTHLY-GROSS * 0.0765 MOVE 125.00 TO WS-INSURANCE *> Calculate net pay COMPUTE WS-NET-PAY = WS-MONTHLY-GROSS - WS-FEDERAL-TAX - WS-STATE-TAX - WS-FICA-TAX - WS-INSURANCE *> Move to display fields with PICTURE editing MOVE WS-MONTHLY-GROSS TO WS-GROSS-DISPLAY MOVE WS-FEDERAL-TAX TO WS-FED-TAX-DISPLAY MOVE WS-STATE-TAX TO WS-STATE-TAX-DISPLAY MOVE WS-FICA-TAX TO WS-FICA-DISPLAY MOVE WS-INSURANCE TO WS-INSURANCE-DISPLAY MOVE WS-NET-PAY TO WS-NET-DISPLAY DISPLAY "Monthly payroll calculations:" DISPLAY " Gross Pay: " WS-GROSS-DISPLAY DISPLAY " Federal Tax: " WS-FED-TAX-DISPLAY DISPLAY " State Tax: " WS-STATE-TAX-DISPLAY DISPLAY " FICA Tax: " WS-FICA-DISPLAY DISPLAY " Insurance: " WS-INSURANCE-DISPLAY DISPLAY " Net Pay: " WS-NET-DISPLAY. GENERATE-FORMATTED-REPORTS. DISPLAY " " DISPLAY "=== FORMATTED PAYROLL REPORT ===" *> Generate formatted report using PICTURE editing DISPLAY WS-REPORT-HEADER DISPLAY WS-COLUMN-HEADERS DISPLAY "--------------------------------------------------------------------" *> Populate detail line with formatted data MOVE WS-EMP-ID TO WS-DETAIL-ID MOVE WS-NAME-DISPLAY TO WS-DETAIL-NAME MOVE WS-MONTHLY-GROSS TO WS-DETAIL-GROSS COMPUTE WS-TOTAL-DEDUCTIONS = WS-FEDERAL-TAX + WS-STATE-TAX + WS-FICA-TAX + WS-INSURANCE MOVE WS-TOTAL-DEDUCTIONS TO WS-DETAIL-DEDUCT MOVE WS-NET-PAY TO WS-DETAIL-NET DISPLAY WS-DETAIL-LINE DISPLAY "--------------------------------------------------------------------". ANALYZE-DEPARTMENT-STATISTICS. DISPLAY " " DISPLAY "=== DEPARTMENT STATISTICS ===" *> Load sample department data MOVE "101" TO WS-DEPT-CODE(1) MOVE "ENGINEERING" TO WS-DEPT-NAME(1) MOVE 25 TO WS-EMPLOYEE-COUNT(1) MOVE 1875000.00 TO WS-TOTAL-PAYROLL(1) MOVE 75000.00 TO WS-AVG-SALARY(1) MOVE 65000.00 TO WS-MIN-SALARY(1) MOVE 95000.00 TO WS-MAX-SALARY(1) MOVE "201" TO WS-DEPT-CODE(2) MOVE "MARKETING" TO WS-DEPT-NAME(2) MOVE 15 TO WS-EMPLOYEE-COUNT(2) MOVE 900000.00 TO WS-TOTAL-PAYROLL(2) MOVE 60000.00 TO WS-AVG-SALARY(2) MOVE 45000.00 TO WS-MIN-SALARY(2) MOVE 85000.00 TO WS-MAX-SALARY(2) *> Display statistics with PICTURE formatting DISPLAY WS-STAT-HEADERS DISPLAY "------------------------------------------------------" PERFORM VARYING DEPT-INDEX FROM 1 BY 1 UNTIL DEPT-INDEX > 2 MOVE WS-DEPT-CODE(DEPT-INDEX) TO WS-STAT-CODE MOVE WS-DEPT-NAME(DEPT-INDEX) TO WS-STAT-NAME MOVE WS-EMPLOYEE-COUNT(DEPT-INDEX) TO WS-STAT-COUNT MOVE WS-TOTAL-PAYROLL(DEPT-INDEX) TO WS-STAT-TOTAL MOVE WS-AVG-SALARY(DEPT-INDEX) TO WS-STAT-AVERAGE DISPLAY WS-STAT-DETAIL END-PERFORM DISPLAY "------------------------------------------------------". DISPLAY-FINAL-SUMMARY. DISPLAY " " DISPLAY "📊 PICTURE CLAUSE SUMMARY" DISPLAY "=========================" DISPLAY "Successfully demonstrated:" DISPLAY " ✓ Basic PICTURE symbols (9, X, A)" DISPLAY " ✓ Numeric formatting with V for decimals" DISPLAY " ✓ Editing characters for display ($, Z, commas)" DISPLAY " ✓ Complex formatting combinations" DISPLAY " ✓ Report generation with formatted output" DISPLAY " ✓ Data validation through PICTURE constraints" DISPLAY " ✓ Professional business document formatting" DISPLAY " " DISPLAY "💡 Key PICTURE Features:" DISPLAY " • Data type specification and validation" DISPLAY " • Storage size determination" DISPLAY " • Display formatting and editing" DISPLAY " • Professional report generation" DISPLAY " • Numeric precision control" DISPLAY " • Character type enforcement"

PICTURE Features and Capabilities

Data Definition
  • • Numeric data specification (9)
  • • Alphanumeric fields (X)
  • • Alphabetic characters (A)
  • • Signed numeric values (S)
Formatting Control
  • • Decimal positioning (V)
  • • Currency symbols ($, €, £)
  • • Zero suppression (Z)
  • • Comma insertion and formatting
Editing Characters
  • • Asterisk fill protection (*)
  • • Sign editing (+, -, CR, DB)
  • • Percentage formatting (%)
  • • Literal insertion
Business Applications
  • • Financial report formatting
  • • Data validation and constraints
  • • Professional document layout
  • • System interface definitions

Best Practices