Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
|
|
|
|
In a single step. TS/OP still missing. Only tested with 80-byte records.
Despite the title, the requirement changed to 9-byte fields along the way. Therefore original LRECL is extended by 5. Final LRECL is extended by a further 689.
The work is done with a BUILD containing 690 elements from the input record (including RDW) and 689 delimiters (including after the final field).
The two other important bits are the extension of the record to its maximum size with OVERLAY and the FINDREP at the end to remove the "empty" delimited fields. NB. If there is a "genuine" empty field, it will disappear too :-)
This is going to be less resource-hungry than multiple passes of the file.
The BUILD has not been coded by hand. Here is how it was generated, then it was copied and the final part of it was edited for the closing of the IFTHEN.
689 records are generated, with a sequence number starting at zero.
Using each sequence number the start position is calculated for each group of 9 bytes, and adjusting for the start position of the first field (5) after the RDW. The word DELIM is included in the element being built, which will later be resolved on the SYMNAMES of the step that is doing the work.
After the records are generated, they are "stacked up" into groups of five, to make things more compact.
Code: |
//GENEM EXEC PGM=SORT
//SORTOUT DD DSN=&&OUT,UNIT=SYSDA,SPACE=(CYL,1),DISP=(,PASS)
//SORTIN DD *
CONTENT NOT RELEVANT
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL REPEAT=689,
IFTHEN=(WHEN=INIT,BUILD=(SEQNUM,2,BI,START=0)),
IFTHEN=(WHEN=INIT,BUILD=(1,2,BI,MUL,+9,ADD,+5,TO=ZD,LENGTH=4,
C',9,DELIM,'))
//stackem EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=&&OUT,DISP=(OLD,PASS)
//OUT1 DD fb 80 dataset
//TOOLIN DD *
RESIZE FROM(IN1) TO(OUT1) TOLEN(65) USING(CTL1)
//CTL1CNTL DD *
OPTION COPY
OUTFIL BUILD=(2X,1,65) |
Code: |
//ADDDELIM EXEC PGM=SORT
//SYMNAMES DD *
DELIM,C'+'
//SYMNOUT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//* SORTOUT DD DSN=&&FIX,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//SORTOUT DD vb 6293
//SYSIN DD *
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=INIT,OVERLAY=(6898:X)),
IFTHEN=(WHEN=INIT,
BUILD=(1,4,
0005,9,DELIM,0014,9,DELIM,0023,9,DELIM,0032,9,DELIM,0041,9,DELIM,
0050,9,DELIM,0059,9,DELIM,0068,9,DELIM,0077,9,DELIM,0086,9,DELIM,
0095,9,DELIM,0104,9,DELIM,0113,9,DELIM,0122,9,DELIM,0131,9,DELIM,
0140,9,DELIM,0149,9,DELIM,0158,9,DELIM,0167,9,DELIM,0176,9,DELIM,
0185,9,DELIM,0194,9,DELIM,0203,9,DELIM,0212,9,DELIM,0221,9,DELIM,
0230,9,DELIM,0239,9,DELIM,0248,9,DELIM,0257,9,DELIM,0266,9,DELIM,
0275,9,DELIM,0284,9,DELIM,0293,9,DELIM,0302,9,DELIM,0311,9,DELIM,
0320,9,DELIM,0329,9,DELIM,0338,9,DELIM,0347,9,DELIM,0356,9,DELIM,
0365,9,DELIM,0374,9,DELIM,0383,9,DELIM,0392,9,DELIM,0401,9,DELIM,
0410,9,DELIM,0419,9,DELIM,0428,9,DELIM,0437,9,DELIM,0446,9,DELIM,
0455,9,DELIM,0464,9,DELIM,0473,9,DELIM,0482,9,DELIM,0491,9,DELIM,
0500,9,DELIM,0509,9,DELIM,0518,9,DELIM,0527,9,DELIM,0536,9,DELIM,
0545,9,DELIM,0554,9,DELIM,0563,9,DELIM,0572,9,DELIM,0581,9,DELIM,
0590,9,DELIM,0599,9,DELIM,0608,9,DELIM,0617,9,DELIM,0626,9,DELIM,
0635,9,DELIM,0644,9,DELIM,0653,9,DELIM,0662,9,DELIM,0671,9,DELIM,
0680,9,DELIM,0689,9,DELIM,0698,9,DELIM,0707,9,DELIM,0716,9,DELIM,
0725,9,DELIM,0734,9,DELIM,0743,9,DELIM,0752,9,DELIM,0761,9,DELIM,
0770,9,DELIM,0779,9,DELIM,0788,9,DELIM,0797,9,DELIM,0806,9,DELIM,
0815,9,DELIM,0824,9,DELIM,0833,9,DELIM,0842,9,DELIM,0851,9,DELIM,
0860,9,DELIM,0869,9,DELIM,0878,9,DELIM,0887,9,DELIM,0896,9,DELIM,
0905,9,DELIM,0914,9,DELIM,0923,9,DELIM,0932,9,DELIM,0941,9,DELIM,
0950,9,DELIM,0959,9,DELIM,0968,9,DELIM,0977,9,DELIM,0986,9,DELIM,
0995,9,DELIM,1004,9,DELIM,1013,9,DELIM,1022,9,DELIM,1031,9,DELIM,
1040,9,DELIM,1049,9,DELIM,1058,9,DELIM,1067,9,DELIM,1076,9,DELIM,
1085,9,DELIM,1094,9,DELIM,1103,9,DELIM,1112,9,DELIM,1121,9,DELIM,
1130,9,DELIM,1139,9,DELIM,1148,9,DELIM,1157,9,DELIM,1166,9,DELIM,
1175,9,DELIM,1184,9,DELIM,1193,9,DELIM,1202,9,DELIM,1211,9,DELIM,
1220,9,DELIM,1229,9,DELIM,1238,9,DELIM,1247,9,DELIM,1256,9,DELIM,
1265,9,DELIM,1274,9,DELIM,1283,9,DELIM,1292,9,DELIM,1301,9,DELIM,
1310,9,DELIM,1319,9,DELIM,1328,9,DELIM,1337,9,DELIM,1346,9,DELIM,
1355,9,DELIM,1364,9,DELIM,1373,9,DELIM,1382,9,DELIM,1391,9,DELIM,
1400,9,DELIM,1409,9,DELIM,1418,9,DELIM,1427,9,DELIM,1436,9,DELIM,
1445,9,DELIM,1454,9,DELIM,1463,9,DELIM,1472,9,DELIM,1481,9,DELIM,
1490,9,DELIM,1499,9,DELIM,1508,9,DELIM,1517,9,DELIM,1526,9,DELIM,
1535,9,DELIM,1544,9,DELIM,1553,9,DELIM,1562,9,DELIM,1571,9,DELIM,
1580,9,DELIM,1589,9,DELIM,1598,9,DELIM,1607,9,DELIM,1616,9,DELIM,
1625,9,DELIM,1634,9,DELIM,1643,9,DELIM,1652,9,DELIM,1661,9,DELIM,
1670,9,DELIM,1679,9,DELIM,1688,9,DELIM,1697,9,DELIM,1706,9,DELIM,
1715,9,DELIM,1724,9,DELIM,1733,9,DELIM,1742,9,DELIM,1751,9,DELIM,
1760,9,DELIM,1769,9,DELIM,1778,9,DELIM,1787,9,DELIM,1796,9,DELIM,
1805,9,DELIM,1814,9,DELIM,1823,9,DELIM,1832,9,DELIM,1841,9,DELIM,
1850,9,DELIM,1859,9,DELIM,1868,9,DELIM,1877,9,DELIM,1886,9,DELIM,
1895,9,DELIM,1904,9,DELIM,1913,9,DELIM,1922,9,DELIM,1931,9,DELIM,
1940,9,DELIM,1949,9,DELIM,1958,9,DELIM,1967,9,DELIM,1976,9,DELIM,
1985,9,DELIM,1994,9,DELIM,2003,9,DELIM,2012,9,DELIM,2021,9,DELIM,
2030,9,DELIM,2039,9,DELIM,2048,9,DELIM,2057,9,DELIM,2066,9,DELIM,
2075,9,DELIM,2084,9,DELIM,2093,9,DELIM,2102,9,DELIM,2111,9,DELIM,
2120,9,DELIM,2129,9,DELIM,2138,9,DELIM,2147,9,DELIM,2156,9,DELIM,
2165,9,DELIM,2174,9,DELIM,2183,9,DELIM,2192,9,DELIM,2201,9,DELIM,
2210,9,DELIM,2219,9,DELIM,2228,9,DELIM,2237,9,DELIM,2246,9,DELIM,
2255,9,DELIM,2264,9,DELIM,2273,9,DELIM,2282,9,DELIM,2291,9,DELIM,
2300,9,DELIM,2309,9,DELIM,2318,9,DELIM,2327,9,DELIM,2336,9,DELIM,
2345,9,DELIM,2354,9,DELIM,2363,9,DELIM,2372,9,DELIM,2381,9,DELIM,
2390,9,DELIM,2399,9,DELIM,2408,9,DELIM,2417,9,DELIM,2426,9,DELIM,
2435,9,DELIM,2444,9,DELIM,2453,9,DELIM,2462,9,DELIM,2471,9,DELIM,
2480,9,DELIM,2489,9,DELIM,2498,9,DELIM,2507,9,DELIM,2516,9,DELIM,
2525,9,DELIM,2534,9,DELIM,2543,9,DELIM,2552,9,DELIM,2561,9,DELIM,
2570,9,DELIM,2579,9,DELIM,2588,9,DELIM,2597,9,DELIM,2606,9,DELIM,
2615,9,DELIM,2624,9,DELIM,2633,9,DELIM,2642,9,DELIM,2651,9,DELIM,
2660,9,DELIM,2669,9,DELIM,2678,9,DELIM,2687,9,DELIM,2696,9,DELIM,
2705,9,DELIM,2714,9,DELIM,2723,9,DELIM,2732,9,DELIM,2741,9,DELIM,
2750,9,DELIM,2759,9,DELIM,2768,9,DELIM,2777,9,DELIM,2786,9,DELIM,
2795,9,DELIM,2804,9,DELIM,2813,9,DELIM,2822,9,DELIM,2831,9,DELIM,
2840,9,DELIM,2849,9,DELIM,2858,9,DELIM,2867,9,DELIM,2876,9,DELIM,
2885,9,DELIM,2894,9,DELIM,2903,9,DELIM,2912,9,DELIM,2921,9,DELIM,
2930,9,DELIM,2939,9,DELIM,2948,9,DELIM,2957,9,DELIM,2966,9,DELIM,
2975,9,DELIM,2984,9,DELIM,2993,9,DELIM,3002,9,DELIM,3011,9,DELIM,
3020,9,DELIM,3029,9,DELIM,3038,9,DELIM,3047,9,DELIM,3056,9,DELIM,
3065,9,DELIM,3074,9,DELIM,3083,9,DELIM,3092,9,DELIM,3101,9,DELIM,
3110,9,DELIM,3119,9,DELIM,3128,9,DELIM,3137,9,DELIM,3146,9,DELIM,
3155,9,DELIM,3164,9,DELIM,3173,9,DELIM,3182,9,DELIM,3191,9,DELIM,
3200,9,DELIM,3209,9,DELIM,3218,9,DELIM,3227,9,DELIM,3236,9,DELIM,
3245,9,DELIM,3254,9,DELIM,3263,9,DELIM,3272,9,DELIM,3281,9,DELIM,
3290,9,DELIM,3299,9,DELIM,3308,9,DELIM,3317,9,DELIM,3326,9,DELIM,
3335,9,DELIM,3344,9,DELIM,3353,9,DELIM,3362,9,DELIM,3371,9,DELIM,
3380,9,DELIM,3389,9,DELIM,3398,9,DELIM,3407,9,DELIM,3416,9,DELIM,
3425,9,DELIM,3434,9,DELIM,3443,9,DELIM,3452,9,DELIM,3461,9,DELIM,
3470,9,DELIM,3479,9,DELIM,3488,9,DELIM,3497,9,DELIM,3506,9,DELIM,
3515,9,DELIM,3524,9,DELIM,3533,9,DELIM,3542,9,DELIM,3551,9,DELIM,
3560,9,DELIM,3569,9,DELIM,3578,9,DELIM,3587,9,DELIM,3596,9,DELIM,
3605,9,DELIM,3614,9,DELIM,3623,9,DELIM,3632,9,DELIM,3641,9,DELIM,
3650,9,DELIM,3659,9,DELIM,3668,9,DELIM,3677,9,DELIM,3686,9,DELIM,
3695,9,DELIM,3704,9,DELIM,3713,9,DELIM,3722,9,DELIM,3731,9,DELIM,
3740,9,DELIM,3749,9,DELIM,3758,9,DELIM,3767,9,DELIM,3776,9,DELIM,
3785,9,DELIM,3794,9,DELIM,3803,9,DELIM,3812,9,DELIM,3821,9,DELIM,
3830,9,DELIM,3839,9,DELIM,3848,9,DELIM,3857,9,DELIM,3866,9,DELIM,
3875,9,DELIM,3884,9,DELIM,3893,9,DELIM,3902,9,DELIM,3911,9,DELIM,
3920,9,DELIM,3929,9,DELIM,3938,9,DELIM,3947,9,DELIM,3956,9,DELIM,
3965,9,DELIM,3974,9,DELIM,3983,9,DELIM,3992,9,DELIM,4001,9,DELIM,
4010,9,DELIM,4019,9,DELIM,4028,9,DELIM,4037,9,DELIM,4046,9,DELIM,
4055,9,DELIM,4064,9,DELIM,4073,9,DELIM,4082,9,DELIM,4091,9,DELIM,
4100,9,DELIM,4109,9,DELIM,4118,9,DELIM,4127,9,DELIM,4136,9,DELIM,
4145,9,DELIM,4154,9,DELIM,4163,9,DELIM,4172,9,DELIM,4181,9,DELIM,
4190,9,DELIM,4199,9,DELIM,4208,9,DELIM,4217,9,DELIM,4226,9,DELIM,
4235,9,DELIM,4244,9,DELIM,4253,9,DELIM,4262,9,DELIM,4271,9,DELIM,
4280,9,DELIM,4289,9,DELIM,4298,9,DELIM,4307,9,DELIM,4316,9,DELIM,
4325,9,DELIM,4334,9,DELIM,4343,9,DELIM,4352,9,DELIM,4361,9,DELIM,
4370,9,DELIM,4379,9,DELIM,4388,9,DELIM,4397,9,DELIM,4406,9,DELIM,
4415,9,DELIM,4424,9,DELIM,4433,9,DELIM,4442,9,DELIM,4451,9,DELIM,
4460,9,DELIM,4469,9,DELIM,4478,9,DELIM,4487,9,DELIM,4496,9,DELIM,
4505,9,DELIM,4514,9,DELIM,4523,9,DELIM,4532,9,DELIM,4541,9,DELIM,
4550,9,DELIM,4559,9,DELIM,4568,9,DELIM,4577,9,DELIM,4586,9,DELIM,
4595,9,DELIM,4604,9,DELIM,4613,9,DELIM,4622,9,DELIM,4631,9,DELIM,
4640,9,DELIM,4649,9,DELIM,4658,9,DELIM,4667,9,DELIM,4676,9,DELIM,
4685,9,DELIM,4694,9,DELIM,4703,9,DELIM,4712,9,DELIM,4721,9,DELIM,
4730,9,DELIM,4739,9,DELIM,4748,9,DELIM,4757,9,DELIM,4766,9,DELIM,
4775,9,DELIM,4784,9,DELIM,4793,9,DELIM,4802,9,DELIM,4811,9,DELIM,
4820,9,DELIM,4829,9,DELIM,4838,9,DELIM,4847,9,DELIM,4856,9,DELIM,
4865,9,DELIM,4874,9,DELIM,4883,9,DELIM,4892,9,DELIM,4901,9,DELIM,
4910,9,DELIM,4919,9,DELIM,4928,9,DELIM,4937,9,DELIM,4946,9,DELIM,
4955,9,DELIM,4964,9,DELIM,4973,9,DELIM,4982,9,DELIM,4991,9,DELIM,
5000,9,DELIM,5009,9,DELIM,5018,9,DELIM,5027,9,DELIM,5036,9,DELIM,
5045,9,DELIM,5054,9,DELIM,5063,9,DELIM,5072,9,DELIM,5081,9,DELIM,
5090,9,DELIM,5099,9,DELIM,5108,9,DELIM,5117,9,DELIM,5126,9,DELIM,
5135,9,DELIM,5144,9,DELIM,5153,9,DELIM,5162,9,DELIM,5171,9,DELIM,
5180,9,DELIM,5189,9,DELIM,5198,9,DELIM,5207,9,DELIM,5216,9,DELIM,
5225,9,DELIM,5234,9,DELIM,5243,9,DELIM,5252,9,DELIM,5261,9,DELIM,
5270,9,DELIM,5279,9,DELIM,5288,9,DELIM,5297,9,DELIM,5306,9,DELIM,
5315,9,DELIM,5324,9,DELIM,5333,9,DELIM,5342,9,DELIM,5351,9,DELIM,
5360,9,DELIM,5369,9,DELIM,5378,9,DELIM,5387,9,DELIM,5396,9,DELIM,
5405,9,DELIM,5414,9,DELIM,5423,9,DELIM,5432,9,DELIM,5441,9,DELIM,
5450,9,DELIM,5459,9,DELIM,5468,9,DELIM,5477,9,DELIM,5486,9,DELIM,
5495,9,DELIM,5504,9,DELIM,5513,9,DELIM,5522,9,DELIM,5531,9,DELIM,
5540,9,DELIM,5549,9,DELIM,5558,9,DELIM,5567,9,DELIM,5576,9,DELIM,
5585,9,DELIM,5594,9,DELIM,5603,9,DELIM,5612,9,DELIM,5621,9,DELIM,
5630,9,DELIM,5639,9,DELIM,5648,9,DELIM,5657,9,DELIM,5666,9,DELIM,
5675,9,DELIM,5684,9,DELIM,5693,9,DELIM,5702,9,DELIM,5711,9,DELIM,
5720,9,DELIM,5729,9,DELIM,5738,9,DELIM,5747,9,DELIM,5756,9,DELIM,
5765,9,DELIM,5774,9,DELIM,5783,9,DELIM,5792,9,DELIM,5801,9,DELIM,
5810,9,DELIM,5819,9,DELIM,5828,9,DELIM,5837,9,DELIM,5846,9,DELIM,
5855,9,DELIM,5864,9,DELIM,5873,9,DELIM,5882,9,DELIM,5891,9,DELIM,
5900,9,DELIM,5909,9,DELIM,5918,9,DELIM,5927,9,DELIM,5936,9,DELIM,
5945,9,DELIM,5954,9,DELIM,5963,9,DELIM,5972,9,DELIM,5981,9,DELIM,
5990,9,DELIM,5999,9,DELIM,6008,9,DELIM,6017,9,DELIM,6026,9,DELIM,
6035,9,DELIM,6044,9,DELIM,6053,9,DELIM,6062,9,DELIM,6071,9,DELIM,
6080,9,DELIM,6089,9,DELIM,6098,9,DELIM,6107,9,DELIM,6116,9,DELIM,
6125,9,DELIM,6134,9,DELIM,6143,9,DELIM,6152,9,DELIM,6161,9,DELIM,
6170,9,DELIM,6179,9,DELIM,6188,9,DELIM,6197,9,DELIM)),
IFTHEN=(WHEN=INIT,FINDREP=(IN=C' +',
OUT=C''))
//*
//SORTIN DD DSN=&&VAR,DISP=(OLD,PASS)
//*
|
|
|