# 20-matching-MN-to-MxN ## 电信业务场景 CDR详细清单M:N→M×N。多个合同×多个通话明细的笛卡尔积组合,输出完整的CDR详细清单(M×N件)。 **M:N matching — Cartesian product output (M x N records per matching key).** Tests the scenario where both input files may contain duplicate keys and every combination of matching master and detail records must be output (the full Cartesian product). ## Test data | File | Records | Keys | |-------------|---------|------------------------------------------| | master.dat | 5 | KEY00001 (x2), KEY00002 (x1), KEY00003 (x2) | | detail.dat | 7 | KEY00001 (x3), KEY00003 (x2), KEY00004 (x2) | - **KEY00001:** 2 masters x 3 details = 6 output records - **KEY00003:** 2 masters x 2 details = 4 output records - **Total output:** 10 records - **Unmatched:** KEY00002 (master only), KEY00004 (detail only) ## Algorithm 1. Read both files synchronously (both assumed sorted by key). 2. When keys match: read all master records for that key into a table, read all detail records for that key into a table, then write M x N output records covering every combination. 3. Unmatched groups are skipped via the standard key-comparison logic. ## Expected output - **output.dat:** 10 records x 45 bytes = 450 bytes - Program displays: `20-matching-MN-to-MxN: PASS` - Script displays: `20-matching-MN-to-MxN: ALL TESTS PASSED`