On 9/10/2020 3:09 PM, Stanislawski, Shawn (National VM Capability) wrote: > Anyone have a great idea on how to use PIPE to replace single record > at a specified record number in a file without having to read / > write out the entire file, with the following caveats? > > * the file could be either recfm FIXED or VARIABLE > * the new record could potentially be either shorter or longer than its > original
If you want to pad or truncate as needed, probably the simplest way is to convert V2C and then back C2V. Assuming the input is numbered for DISKUPDATE: (end /) ... | in: fanout | chop 10 | copy | diskrandom fn ft fm | xlate 00-ff 40 | out: specs 1-* v2c 11 select 1 1.10 1 11-* 13 | specs 1.10 1 11-* c2v 11 | diskupdate fn ft fm / in: | out: I was always a little disappointed that COMBINE wouldn't truncate and the f2V conversions wouldn't pad. And speaking of V format, I don't think I ever got around to complaining about this error way back: > pipe literal 123| specs 1-* v2c 1.2 | cons > Output field too short to contain field length. > ... Issued from stage 2 of pipeline 1. > ... Running "specs 1-* v2c 1.2". > Processing item number 1: 1-* v2c 1.2. The message is wrong, since 2 is just long enough to contain the field length, but even if I asked for only one character I don't get why this is an error. V2B and V2X don't care if there's room for the output; why should V2C? Uh-oh. I must never have tried THIS before: > pipe literal 123| specs 1-* v2c 1.3 right | cons > 1 That's just wrong. ¬R