24-table-search: Internal Table Search
电信业务场景
资费表内部检索。在内存套餐资费表中使用SEARCH ALL(二分查找)按套餐代码检索单价,使用SEARCH顺序查找备用。
Description
Demonstrates OCCURS table processing with three search methods:
- SEARCH ALL (binary search) on a sorted 10-entry table
- SEARCH (sequential scan) on the same table
- SEARCH ALL on a variable-length table (OCCURS DEPENDING ON)
Also demonstrates INDEXED BY index manipulation and bounds checking.
Record Layout
Input (2 bytes)
| Field |
Type |
Length |
Description |
| IN-KEY |
PIC X |
2 |
Key to search for |
Output (71 bytes)
| Field |
Type |
Length |
Description |
| OUT-KEY |
PIC X |
2 |
Searched key |
| FILLER |
PIC X |
1 |
Space separator |
| ALL-STAT |
PIC X |
1 |
SEARCH ALL found? (Y/N) |
| FILLER |
PIC X |
1 |
Space separator |
| SEQ-STAT |
PIC X |
1 |
SEARCH found? (Y/N) |
| FILLER |
PIC X |
1 |
Space separator |
| VAR-STAT |
PIC X |
1 |
VAR table found? (Y/N) |
| FILLER |
PIC X |
1 |
Space separator |
| ALL-VAL |
PIC X |
20 |
SEARCH ALL found value |
| FILLER |
PIC X |
1 |
Space separator |
| SEQ-VAL |
PIC X |
20 |
SEARCH found value |
| FILLER |
PIC X |
1 |
Space separator |
| VAR-VAL |
PIC X |
20 |
VAR table found value |
Internal Table (10 entries)
| Index |
Key |
Value |
| 1 |
AA |
Alpha-001 |
| 2 |
BB |
Beta-002 |
| 3 |
CC |
Charlie-003 |
| 4 |
DD |
Delta-004 |
| 5 |
EE |
Echo-005 |
| 6 |
FF |
Foxtrot-006 |
| 7 |
GG |
Golf-007 |
| 8 |
HH |
Hotel-008 |
| 9 |
II |
India-009 |
| 10 |
JJ |
Juliett-010 |
Variable-length table (OCCURS DEPENDING ON size=8): entries 1-8.
Files
| File |
Purpose |
| main-24-table-search.cbl |
Main COBOL program |
| data-gen.sh |
Generate search key data |
| run.sh |
Compile, run, verify |
| README.md |
This file |
Tests
| Test Case |
Description |
| Key exists (first) |
'AA' - found by all methods |
| Key exists (middle) |
'CC' - found by all methods |
| Key exists (last) |
'JJ' - found by main, excluded in var |
| Key not exists |
'XX' - not found |
| Invalid format |
'99' - numeric, not found |
| Case mismatch |
'aa' - lowercase, case-sensitive search |
| Empty key |
Spaces - not found |
| Var table boundary |
'II' - in main table(9), not in var(8) |
| Index bounds test |
Set index to 15, detect out-of-bounds |
Usage
Expected Behavior
- SEARCH ALL and SEARCH both find keys AA, BB, CC, DD, EE, FF, GG, HH, II, JJ.
- SEARCH ALL on VAR table (size 8) finds only AA-HH.
- Non-existent keys return 'N' status with empty values.
- Index manipulation (SET to 15) is detected and reported.