MainframeMaster

COBOL Tutorial

COBOL NATIONAL Data Type

The NATIONAL data type represents sophisticated Unicode character support and international encoding capabilities within COBOL programming environments, providing comprehensive multi-byte character handling, advanced internationalization features, and intelligent character set management that enables globalized applications, Unicode compliance, and multi-language data processing. This data type embodies modern internationalization principles by supporting wide character encoding, enabling comprehensive character set coverage, and facilitating international application development requirements while maintaining encoding consistency, ensuring character data integrity, and enabling scalable global processing architectures across enterprise applications requiring international character support, Unicode compliance, and reliable multi-language data management throughout diverse linguistic and cultural business environments.

NATIONAL Data Type Syntax

NATIONAL Field Definitions
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
*> Basic NATIONAL field definitions 01 WS-NATIONAL-FIELDS. 05 WS-UNICODE-NAME PIC N(20). 05 WS-INTERNATIONAL-ADDR PIC N(50). 05 WS-MULTI-LANG-DESC PIC N(100). *> NATIONAL with USAGE clause 01 WS-UNICODE-DATA. 05 WS-WIDE-CHAR-FIELD PIC N(30) USAGE NATIONAL. 05 WS-UTF16-STRING PIC N(40) USAGE NATIONAL. *> NATIONAL literals and constants 01 WS-NATIONAL-CONSTANTS. 05 WS-UNICODE-GREETING PIC N(15) VALUE N"Hello 世界". 05 WS-EURO-SYMBOL PIC N(1) VALUE N"€". 05 WS-YEN-AMOUNT PIC N(10) VALUE N"¥12,345". *> NATIONAL arrays and tables 01 WS-LANGUAGE-TABLE. 05 WS-LANGUAGE-ENTRY OCCURS 10 TIMES. 10 WS-LANG-CODE PIC X(2). 10 WS-LANG-NAME PIC N(20). 10 WS-LANG-GREETING PIC N(30). *> Variable length NATIONAL 01 WS-VARIABLE-NATIONAL. 05 WS-VAR-LENGTH PIC 9(4) COMP. 05 WS-VAR-DATA PIC N(100) DEPENDING ON WS-VAR-LENGTH. *> NATIONAL with JUSTIFIED 01 WS-FORMATTED-NATIONAL. 05 WS-RIGHT-JUSTIFIED PIC N(20) JUSTIFIED RIGHT. 05 WS-LEFT-JUSTIFIED PIC N(20) JUSTIFIED LEFT. *> Example NATIONAL usage in records 01 CUSTOMER-RECORD-INTL. 05 CUSTOMER-ID PIC X(8). 05 CUSTOMER-NAME-LOCAL PIC N(40). 05 CUSTOMER-NAME-NATIVE PIC N(40). 05 ADDRESS-LINE1 PIC N(50). 05 ADDRESS-LINE2 PIC N(50). 05 CITY-NAME PIC N(30). 05 COUNTRY-NAME PIC N(25). 05 PHONE-INTL PIC N(20). 05 EMAIL-ADDRESS PIC N(60).
Unicode
International
Multi-byte

Comprehensive NATIONAL 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
IDENTIFICATION DIVISION. PROGRAM-ID. NATIONAL-DATA-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> International customer data 01 WS-INTL-CUSTOMER. 05 WS-CUSTOMER-ID PIC X(10). 05 WS-CUSTOMER-NAME. 10 WS-FIRST-NAME PIC N(20). 10 WS-LAST-NAME PIC N(30). 05 WS-COMPANY-NAME PIC N(50). 05 WS-ADDRESS-INTL. 10 WS-STREET PIC N(40). 10 WS-CITY PIC N(25). 10 WS-REGION PIC N(25). 10 WS-POSTAL-CODE PIC N(15). 10 WS-COUNTRY PIC N(25). 05 WS-CONTACT-INFO. 10 WS-EMAIL PIC N(60). 10 WS-PHONE PIC N(20). 10 WS-WEBSITE PIC N(80). *> Multi-language product catalog 01 WS-PRODUCT-INTL. 05 WS-PRODUCT-ID PIC X(12). 05 WS-PRODUCT-NAMES OCCURS 5 TIMES. 10 WS-LANGUAGE-CODE PIC X(2). 10 WS-PRODUCT-NAME PIC N(40). 10 WS-DESCRIPTION PIC N(200). 10 WS-KEYWORDS PIC N(100). 05 WS-PRICE-DISPLAY PIC N(15). 05 WS-CURRENCY-SYMBOL PIC N(3). *> International address formatter 01 WS-ADDRESS-FORMATTER. 05 WS-FORMAT-TYPE PIC X(10). 05 WS-FORMATTED-ADDRESS PIC N(300). 05 WS-ADDRESS-LINES OCCURS 6 TIMES. 10 WS-LINE-CONTENT PIC N(50). *> Unicode text processing 01 WS-TEXT-PROCESSOR. 05 WS-INPUT-TEXT PIC N(1000). 05 WS-OUTPUT-TEXT PIC N(1000). 05 WS-CHAR-COUNT PIC 9(4). 05 WS-WORD-COUNT PIC 9(4). 05 WS-BYTE-COUNT PIC 9(6). *> Language-specific formatting 01 WS-FORMATTING-RULES. 05 WS-DATE-FORMAT PIC N(20). 05 WS-TIME-FORMAT PIC N(15). 05 WS-NUMBER-FORMAT PIC N(25). 05 WS-CURRENCY-FORMAT PIC N(20). *> Character encoding conversions 01 WS-CONVERSION-FIELDS. 05 WS-ASCII-DATA PIC X(100). 05 WS-UNICODE-DATA PIC N(100). 05 WS-UTF8-DATA PIC X(300). 05 WS-CONVERSION-STATUS PIC X(2). PROCEDURE DIVISION. MAIN-NATIONAL-DEMO. DISPLAY "=== COBOL NATIONAL DATA TYPE DEMONSTRATION ===" DISPLAY SPACES PERFORM DEMONSTRATE-BASIC-NATIONAL PERFORM DEMONSTRATE-INTL-CUSTOMER-DATA PERFORM DEMONSTRATE-MULTILANG-PRODUCT PERFORM DEMONSTRATE-ADDRESS-FORMATTING PERFORM DEMONSTRATE-TEXT-PROCESSING PERFORM DEMONSTRATE-UNICODE-OPERATIONS DISPLAY "=== NATIONAL DATA DEMO COMPLETE ===" STOP RUN. DEMONSTRATE-BASIC-NATIONAL. DISPLAY "=== BASIC NATIONAL DATA USAGE ===" DISPLAY SPACES DISPLAY "Unicode character examples:" *> Initialize with Unicode literals MOVE N"José María" TO WS-FIRST-NAME MOVE N"García-Rodríguez" TO WS-LAST-NAME MOVE N"Société Générale" TO WS-COMPANY-NAME DISPLAY " Customer name: " WS-FIRST-NAME " " WS-LAST-NAME DISPLAY " Company: " WS-COMPANY-NAME *> International symbols and currencies MOVE N"€1,234.56" TO WS-PRICE-DISPLAY MOVE N"€" TO WS-CURRENCY-SYMBOL DISPLAY " Price: " WS-PRICE-DISPLAY " (" WS-CURRENCY-SYMBOL ")" *> Asian characters MOVE N"東京都" TO WS-CITY MOVE N"日本" TO WS-COUNTRY DISPLAY " Location: " WS-CITY ", " WS-COUNTRY *> Arabic/RTL text MOVE N"الرياض" TO WS-CITY MOVE N"المملكة العربية السعودية" TO WS-COUNTRY DISPLAY " Arabic location: " WS-CITY ", " WS-COUNTRY DISPLAY SPACES. DEMONSTRATE-INTL-CUSTOMER-DATA. DISPLAY "=== INTERNATIONAL CUSTOMER DATA ===" DISPLAY SPACES DISPLAY "Processing international customer records..." *> European customer MOVE "CUST001" TO WS-CUSTOMER-ID MOVE N"François" TO WS-FIRST-NAME MOVE N"Müller-Schmidt" TO WS-LAST-NAME MOVE N"Café René S.À R.L." TO WS-COMPANY-NAME MOVE N"15 Rue de la Paix" TO WS-STREET MOVE N"Paris" TO WS-CITY MOVE N"Île-de-France" TO WS-REGION MOVE N"75001" TO WS-POSTAL-CODE MOVE N"France" TO WS-COUNTRY MOVE N"françois.müller@caferene.fr" TO WS-EMAIL MOVE N"+33 1 42 96 87 65" TO WS-PHONE DISPLAY "European customer:" DISPLAY " ID: " WS-CUSTOMER-ID DISPLAY " Name: " WS-FIRST-NAME " " WS-LAST-NAME DISPLAY " Company: " WS-COMPANY-NAME DISPLAY " Address: " WS-STREET DISPLAY " " WS-CITY ", " WS-REGION " " WS-POSTAL-CODE DISPLAY " " WS-COUNTRY DISPLAY " Email: " WS-EMAIL DISPLAY " Phone: " WS-PHONE DISPLAY SPACES *> Asian customer MOVE "CUST002" TO WS-CUSTOMER-ID MOVE N"田中" TO WS-FIRST-NAME MOVE N"太郎" TO WS-LAST-NAME MOVE N"株式会社サンプル" TO WS-COMPANY-NAME MOVE N"東京都新宿区1-2-3" TO WS-STREET MOVE N"新宿区" TO WS-CITY MOVE N"東京都" TO WS-REGION MOVE N"160-0022" TO WS-POSTAL-CODE MOVE N"日本" TO WS-COUNTRY MOVE N"tanaka.taro@sample.co.jp" TO WS-EMAIL MOVE N"+81-3-1234-5678" TO WS-PHONE DISPLAY "Japanese customer:" DISPLAY " ID: " WS-CUSTOMER-ID DISPLAY " Name: " WS-FIRST-NAME " " WS-LAST-NAME DISPLAY " Company: " WS-COMPANY-NAME DISPLAY " Address: " WS-STREET DISPLAY " " WS-CITY ", " WS-REGION " " WS-POSTAL-CODE DISPLAY " " WS-COUNTRY DISPLAY " Email: " WS-EMAIL DISPLAY " Phone: " WS-PHONE DISPLAY SPACES. DEMONSTRATE-MULTILANG-PRODUCT. DISPLAY "=== MULTI-LANGUAGE PRODUCT CATALOG ===" DISPLAY SPACES DISPLAY "Creating multi-language product entries..." MOVE "PROD12345" TO WS-PRODUCT-ID *> English version MOVE "EN" TO WS-LANGUAGE-CODE(1) MOVE N"Premium Coffee Beans" TO WS-PRODUCT-NAME(1) MOVE N"High-quality arabica coffee beans from Colombia" TO WS-DESCRIPTION(1) MOVE N"coffee, premium, arabica, colombia" TO WS-KEYWORDS(1) *> Spanish version MOVE "ES" TO WS-LANGUAGE-CODE(2) MOVE N"Granos de Café Premium" TO WS-PRODUCT-NAME(2) MOVE N"Granos de café arábica de alta calidad de Colombia" TO WS-DESCRIPTION(2) MOVE N"café, premium, arábica, colombia" TO WS-KEYWORDS(2) *> French version MOVE "FR" TO WS-LANGUAGE-CODE(3) MOVE N"Grains de Café Haut de Gamme" TO WS-PRODUCT-NAME(3) MOVE N"Grains de café arabica de haute qualité de Colombie" TO WS-DESCRIPTION(3) MOVE N"café, haut de gamme, arabica, colombie" TO WS-KEYWORDS(3) *> Japanese version MOVE "JA" TO WS-LANGUAGE-CODE(4) MOVE N"プレミアムコーヒー豆" TO WS-PRODUCT-NAME(4) MOVE N"コロンビア産の高品質アラビカコーヒー豆" TO WS-DESCRIPTION(4) MOVE N"コーヒー, プレミアム, アラビカ, コロンビア" TO WS-KEYWORDS(4) *> Chinese version MOVE "ZH" TO WS-LANGUAGE-CODE(5) MOVE N"优质咖啡豆" TO WS-PRODUCT-NAME(5) MOVE N"来自哥伦比亚的高品质阿拉比卡咖啡豆" TO WS-DESCRIPTION(5) MOVE N"咖啡, 优质, 阿拉比卡, 哥伦比亚" TO WS-KEYWORDS(5) DISPLAY "Product " WS-PRODUCT-ID " in multiple languages:" PERFORM VARYING WS-CHAR-COUNT FROM 1 BY 1 UNTIL WS-CHAR-COUNT > 5 DISPLAY " " WS-LANGUAGE-CODE(WS-CHAR-COUNT) ": " WS-PRODUCT-NAME(WS-CHAR-COUNT) DISPLAY " " WS-DESCRIPTION(WS-CHAR-COUNT) END-PERFORM DISPLAY SPACES. DEMONSTRATE-ADDRESS-FORMATTING. DISPLAY "=== INTERNATIONAL ADDRESS FORMATTING ===" DISPLAY SPACES DISPLAY "Formatting addresses for different countries..." *> Format US address MOVE "US" TO WS-FORMAT-TYPE MOVE N"John Smith" TO WS-LINE-CONTENT(1) MOVE N"123 Main Street, Apt 4B" TO WS-LINE-CONTENT(2) MOVE N"New York, NY 10001" TO WS-LINE-CONTENT(3) MOVE N"United States" TO WS-LINE-CONTENT(4) MOVE SPACES TO WS-LINE-CONTENT(5) MOVE SPACES TO WS-LINE-CONTENT(6) DISPLAY "US Address Format:" PERFORM VARYING WS-CHAR-COUNT FROM 1 BY 1 UNTIL WS-CHAR-COUNT > 4 IF WS-LINE-CONTENT(WS-CHAR-COUNT) NOT = SPACES DISPLAY " " WS-LINE-CONTENT(WS-CHAR-COUNT) END-IF END-PERFORM DISPLAY SPACES *> Format German address MOVE "DE" TO WS-FORMAT-TYPE MOVE N"Herr Hans Müller" TO WS-LINE-CONTENT(1) MOVE N"Muster GmbH" TO WS-LINE-CONTENT(2) MOVE N"Hauptstraße 123" TO WS-LINE-CONTENT(3) MOVE N"12345 München" TO WS-LINE-CONTENT(4) MOVE N"Deutschland" TO WS-LINE-CONTENT(5) MOVE SPACES TO WS-LINE-CONTENT(6) DISPLAY "German Address Format:" PERFORM VARYING WS-CHAR-COUNT FROM 1 BY 1 UNTIL WS-CHAR-COUNT > 5 IF WS-LINE-CONTENT(WS-CHAR-COUNT) NOT = SPACES DISPLAY " " WS-LINE-CONTENT(WS-CHAR-COUNT) END-IF END-PERFORM DISPLAY SPACES. DEMONSTRATE-TEXT-PROCESSING. DISPLAY "=== UNICODE TEXT PROCESSING ===" DISPLAY SPACES DISPLAY "Processing international text..." *> Sample multilingual text MOVE N"Hello World! Hola Mundo! Bonjour le Monde! こんにちは世界! 你好世界!" TO WS-INPUT-TEXT DISPLAY "Input text: " WS-INPUT-TEXT *> Count characters (logical length) MOVE FUNCTION LENGTH(WS-INPUT-TEXT) TO WS-CHAR-COUNT DISPLAY "Character count: " WS-CHAR-COUNT *> Simulate byte count (UTF-16 encoding) COMPUTE WS-BYTE-COUNT = WS-CHAR-COUNT * 2 DISPLAY "Estimated byte count (UTF-16): " WS-BYTE-COUNT *> Text transformation example MOVE FUNCTION UPPER-CASE(WS-INPUT-TEXT) TO WS-OUTPUT-TEXT DISPLAY "Uppercase: " WS-OUTPUT-TEXT MOVE FUNCTION LOWER-CASE(WS-INPUT-TEXT) TO WS-OUTPUT-TEXT DISPLAY "Lowercase: " WS-OUTPUT-TEXT DISPLAY SPACES. DEMONSTRATE-UNICODE-OPERATIONS. DISPLAY "=== UNICODE OPERATIONS ===" DISPLAY SPACES DISPLAY "Unicode data manipulation examples:" *> String concatenation with Unicode MOVE N"Café " TO WS-INPUT-TEXT STRING WS-INPUT-TEXT N"René " N"& " N"Müller" DELIMITED BY SIZE INTO WS-OUTPUT-TEXT DISPLAY " Concatenated: " WS-OUTPUT-TEXT *> Unicode string inspection MOVE N"Testing 测试 テスト" TO WS-INPUT-TEXT DISPLAY " Mixed script text: " WS-INPUT-TEXT IF WS-INPUT-TEXT CONTAINS N"测试" DISPLAY " ✓ Contains Chinese characters" END-IF IF WS-INPUT-TEXT CONTAINS N"テスト" DISPLAY " ✓ Contains Japanese characters" END-IF *> Currency symbol handling MOVE N"Price: €123.45 or ¥15,678 or $100.00" TO WS-INPUT-TEXT DISPLAY " Currency text: " WS-INPUT-TEXT *> Unicode literal comparisons IF N"€" = N"€" DISPLAY " ✓ Euro symbols match" END-IF IF N"¥" NOT = N"$" DISPLAY " ✓ Yen and Dollar symbols differ" END-IF DISPLAY "Unicode features demonstrated:" DISPLAY " ✓ Multi-byte character support" DISPLAY " ✓ International character sets" DISPLAY " ✓ Unicode literal handling" DISPLAY " ✓ Character encoding conversion" DISPLAY " ✓ Global application support" DISPLAY SPACES.

NATIONAL Data Type Features

Unicode Support
  • • UTF-16/UCS-2 character encoding
  • • Multi-byte character handling
  • • International character sets
  • • Unicode literal support (N"text")
Globalization Features
  • • Multi-language application support
  • • Cultural character representation
  • • Currency symbol handling
  • • International address formatting

Interactive Tutorial

Hands-On Exercise: International Application
Practice creating multi-language data structures using NATIONAL

Exercise 1: Multi-Language User Interface

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
01 WS-UI-MESSAGES. 05 WS-LANGUAGE-PACK OCCURS 4 TIMES. 10 WS-LANG-ID PIC X(2). 10 WS-WELCOME-MSG PIC N(30). 10 WS-LOGIN-PROMPT PIC N(20). 10 WS-ERROR-MSG PIC N(50). 10 WS-SUCCESS-MSG PIC N(40). PROCEDURE DIVISION. INITIALIZE-UI-MESSAGES. *> English messages MOVE "EN" TO WS-LANG-ID(1) MOVE N"Welcome to our application" TO WS-WELCOME-MSG(1) MOVE N"Please log in" TO WS-LOGIN-PROMPT(1) MOVE N"Invalid username or password" TO WS-ERROR-MSG(1) MOVE N"Login successful" TO WS-SUCCESS-MSG(1) *> Spanish messages MOVE "ES" TO WS-LANG-ID(2) MOVE N"Bienvenido a nuestra aplicación" TO WS-WELCOME-MSG(2) MOVE N"Por favor inicie sesión" TO WS-LOGIN-PROMPT(2) MOVE N"Usuario o contraseña inválidos" TO WS-ERROR-MSG(2) MOVE N"Inicio de sesión exitoso" TO WS-SUCCESS-MSG(2) *> French messages MOVE "FR" TO WS-LANG-ID(3) MOVE N"Bienvenue dans notre application" TO WS-WELCOME-MSG(3) MOVE N"Veuillez vous connecter" TO WS-LOGIN-PROMPT(3) MOVE N"Nom d'utilisateur ou mot de passe invalide" TO WS-ERROR-MSG(3) MOVE N"Connexion réussie" TO WS-SUCCESS-MSG(3) *> Japanese messages MOVE "JA" TO WS-LANG-ID(4) MOVE N"アプリケーションへようこそ" TO WS-WELCOME-MSG(4) MOVE N"ログインしてください" TO WS-LOGIN-PROMPT(4) MOVE N"ユーザー名またはパスワードが無効です" TO WS-ERROR-MSG(4) MOVE N"ログインに成功しました" TO WS-SUCCESS-MSG(4). DISPLAY-MESSAGES. 01 WS-SELECTED-LANG PIC 9 VALUE 1. DISPLAY "UI Messages for language: " WS-LANG-ID(WS-SELECTED-LANG) DISPLAY "Welcome: " WS-WELCOME-MSG(WS-SELECTED-LANG) DISPLAY "Login: " WS-LOGIN-PROMPT(WS-SELECTED-LANG) DISPLAY "Error: " WS-ERROR-MSG(WS-SELECTED-LANG) DISPLAY "Success: " WS-SUCCESS-MSG(WS-SELECTED-LANG).

Exercise 2: International Product Catalog

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
01 WS-INTL-PRODUCT-CATALOG. 05 WS-PRODUCT-ENTRY OCCURS 3 TIMES. 10 WS-PRODUCT-CODE PIC X(8). 10 WS-PRODUCT-INFO OCCURS 3 TIMES. 15 WS-LOCALE PIC X(5). 15 WS-PRODUCT-NAME PIC N(40). 15 WS-DESCRIPTION PIC N(100). 15 WS-PRICE-TEXT PIC N(20). PROCEDURE DIVISION. SETUP-PRODUCT-CATALOG. *> Product 1 - Coffee MOVE "COFFEE01" TO WS-PRODUCT-CODE(1) *> English MOVE "en-US" TO WS-LOCALE(1, 1) MOVE N"Premium Coffee Blend" TO WS-PRODUCT-NAME(1, 1) MOVE N"Rich, full-bodied coffee with chocolate notes" TO WS-DESCRIPTION(1, 1) MOVE N"$24.99" TO WS-PRICE-TEXT(1, 1) *> French MOVE "fr-FR" TO WS-LOCALE(1, 2) MOVE N"Mélange de Café Premium" TO WS-PRODUCT-NAME(1, 2) MOVE N"Café riche et corsé avec des notes de chocolat" TO WS-DESCRIPTION(1, 2) MOVE N"24,99 €" TO WS-PRICE-TEXT(1, 2) *> Japanese MOVE "ja-JP" TO WS-LOCALE(1, 3) MOVE N"プレミアムコーヒーブレンド" TO WS-PRODUCT-NAME(1, 3) MOVE N"チョコレートの香りがする濃厚でフルボディのコーヒー" TO WS-DESCRIPTION(1, 3) MOVE N"¥3,299" TO WS-PRICE-TEXT(1, 3). DISPLAY-PRODUCT-INFO. 01 WS-PROD-IDX PIC 9 VALUE 1. 01 WS-LOCALE-IDX PIC 9 VALUE 1. DISPLAY "Product: " WS-PRODUCT-CODE(WS-PROD-IDX) DISPLAY "Locale: " WS-LOCALE(WS-PROD-IDX, WS-LOCALE-IDX) DISPLAY "Name: " WS-PRODUCT-NAME(WS-PROD-IDX, WS-LOCALE-IDX) DISPLAY "Description: " WS-DESCRIPTION(WS-PROD-IDX, WS-LOCALE-IDX) DISPLAY "Price: " WS-PRICE-TEXT(WS-PROD-IDX, WS-LOCALE-IDX).

Best Practices

Knowledge Check

Test Your Understanding

Question 1: NATIONAL vs ALPHANUMERIC

What are the key differences between NATIONAL and regular alphanumeric fields?

Answer: NATIONAL uses Unicode encoding (typically UTF-16) with 2 bytes per character, supporting international characters. ALPHANUMERIC uses single-byte encoding, limited to specific character sets like ASCII or EBCDIC. NATIONAL enables global applications and multi-language support.

Question 2: Unicode Literals

How do you specify Unicode literal values in COBOL?

Answer: Use the N prefix before quoted strings: N"Hello World" or N"こんにちは". This tells the compiler to treat the literal as Unicode text rather than single-byte characters, enabling international character representation in source code.

Question 3: Storage Requirements

How does NATIONAL data type affect storage requirements?

Answer: NATIONAL typically requires 2 bytes per character (UTF-16 encoding), doubling storage compared to single-byte character fields. A PIC N(20) field uses 40 bytes. This affects file sizes, memory usage, and I/O performance considerations.