filefind←{                          ⍝ Find 'string' ⍵ in component file ⍺.

    (~(⊂⍺)∊⎕FNUMS):⍺ ∇{             ⍝ left arg not a tie number: try to tie.
        emsg←⍕'Can''t open ',⍺      ⍝ bad file error message.
        0::emsg ⎕SIGNAL ⎕EN         ⍝ tie failure:: complain.
        tie←⍺ ⎕FSTIE 0              ⍝ shared tie number for file.
        (⎕FUNTIE tie)tie ⍺⍺ ⍵      ⍝ find & untie file.
    }⍵                              ⍝ ... search 'string'.

    read←⎕FREAD∘(⍺∘,)               ⍝ read file component.

    ~∘0{                            ⍝ disregarding no-hit components.
        ⍺=0:0                       ⍝ (null file).
        ⍺×{                         ⍝ comp no or 0.
            (|≡⍺)>|≡,⍵:1∊∊⍺ ∇¨⊂⍵    ⍝ too nested: try each sub-array.
            1∊⍵⍷⍺                   ⍝ string found in
        }∘⍵ read ⍺                  ⍝ ... ⍺th component.
    }∘⍵¨↑{                          ⍝ applied to each item of
        (⍺-⎕IO)+⍳1+⍵-⍺              ⍝ vector of file comp nos.
    }/0 ¯1+2↑⎕FSIZE ⍺               ⍝ first and last comp nos.
}
code_colours

test script

Back to: notes

Back to: Workspaces