Is there a maximum number of virtual lines? What is the maximum length?
If not more than 100, then PARSE with "blank record" dropping for the ones which aren't there for any given record.
There are some recent examples of similar things for fixed-length records. May be able to fix the lengths (OVERLAY=(23401:X), use SyncTool's RESIZE and work on that. It would be multiple passes of the data, and with "blank record" dropping, but it may work out.