On 2019-08-14 12:45 PM, amphitr...@ok.de wrote:
> In a file I have every now and then a record tagged at the
> beginning, all other lines begin with blanks. I'd like to change
> the sequence of tagged records with the one directly following it
> (which is for sure not tagged).

A way that's a little tricky but avoids messing with combining records
is to use DROP LAST to delay a copy of the file by one record, and keep
the tagged records from that stream.  Note that I would normally add a
new last record to drop with STRLITERAL APPEND, but if you know the last
record won't be tagged we can skip that:

  (end /) ...
    | dup: fanout
    | strfind '_'
    | all: faninany
    | ...
    / dup:
    | drop last 1
    | strnfind '_'
    | all:

If the frequency of tagged records is very small, there might be some
performance advantage to picking out and duplicating only the
pairs--saves the cost of copying the other records, but adds a third
stream for FANINANY to watch:

  (end /) ...
    | pair: pick from 1 ¬== ' ' count 2
    | dup: fanout
    | strfind '_'
    | all: faninany
    | ...
    / dup:
    | drop last 1
    | strnfind '_'
    | all:
    / pair:
    | all:

¬R

Reply via email to