bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] Improvements on ⎕FIO


From: Christian Robert
Subject: Re: [Bug-apl] Improvements on ⎕FIO
Date: Tue, 21 Jun 2016 23:54:18 -0400
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1

No, I really mean ⎕FIO['fopen'] as native function.

Xtian.


On 2016-06-21 23:40, Elias Mårtenson wrote:
This already exists. Just load FILE_IO from workspace 5 and you can use things 
like FIO∆fread

Regards,
Elias

On 22 June 2016 at 11:36, Christian Robert <address@hidden 
<mailto:address@hidden>> wrote:

    Jürgen,

    While we are at it,

    Can ⎕FIO[something_integer] can be made to understand also things like:

    ⎕FIO['fopen']
    ⎕FIO['fclose']
    ⎕FIO['popen']
    ⎕FIO['read']

    and so on ? Would simplify coding time a LOT and help readability !

    my 2 cents,

    Xtian.



    On 2016-06-21 22:39, Elias Mårtenson wrote:

        Would anyone be interested if I actually implemented support regex by 
calling into the C library?

        I'm envisioning something like this:

        *      "^([a-z]+):([0-9]+)$" regex∆scan "foo:123"*
        ┏→━━━━━━━━━━┓
        ┃"foo" "123"┃
        ┗∊━━━━━━━━━━┛

        Regards,
        Elias

        On 22 June 2016 at 10:35, Xiao-Yong Jin <address@hidden <mailto:address@hidden> 
<mailto:address@hidden <mailto:address@hidden>>> wrote:

            At some point I really wanted to implement the simplest editor, 
namely ed (it would be much better than any APL system has offered), in APL, 
but I never finished the regex part.  Perhaps it would be a nice exercise for 
someone who’s interested in learning APL to actually implement some of the most 
used Unix command line utilities.

            > On Jun 21, 2016, at 8:53 PM, Christian Robert <address@hidden 
<mailto:address@hidden> <mailto:address@hidden <mailto:address@hidden>>> wrote:
            >
            > Hi,
            >
            > A more general purpose search&replace (some bug fixed), take (2), was 
"snr".
            >
            >
            >
            >      )sic
            >      )erase replace
            >      ∇z←s replace p;fr;to;P;i;⎕io
            > ⍝ -------------
            > →(2≤≡s)/ForEach
            > →(2≤⍴⍴s)/Matrix
            > →Vector
            > ⍝ -------------
            > ForEach: z←{⍵ replace p}¨s ◊ →0
            > Matrix: z←⊃ {⍵ replace p}¨ ⊂[2]s ◊ →0
            > ⍝ -------------
            > Vector: p←,¨p ◊ z←s←,s ⋄ ⎕io←1
            > Loop:→((⍴p)<2)/0
            > (fr to)←2↑p ◊ p←2↓p
            > P←¯1↓∧/[1](¯1+⍳⍴fr)⌽fr∘.=z,⎕ucs 1
            > i←0
            > Sanitize: i←i+1
            > →(i>(⍴P)-⍴fr)/Substitute
            > →(0=P[i])/Sanitize
            > ((⊂ i+¯1+⍳⍴fr)⌷P)←(⍴fr)↑1
            > →Sanitize
            > Substitute: P←⌽(P/⍳⍴P)
            > ⊣ {z←((¯1+⍵)↑z),to,(¯1+⍵+⍴fr)↓z}¨P
            > →Loop
            > ∇
            >
            > It should be vector, matrix and embedded objects "aware" (as long 
as it is all text)
            >
            > Syntax:
            >
            >  source replace "this" "by_that" "this" "by_that" [...]  (eg: pairs of 
"from" and "to")
            >
            > Examples:
            >
            >      (⎕cr 'replace') replace 'replace' 'snr' 'ForEach' "Each" "Substitute" "Subst" 
"Sanitize" "Sane"
            > z←s snr p;fr;to;P;i;⎕io
            > ⍝ -------------
            > →(2≤≡s)/Each
            > →(2≤⍴⍴s)/Matrix
            > →Vector
            > ⍝ -------------
            > Each: z←{⍵ snr p}¨s ◊ →0
            > Matrix: z←⊃ {⍵ snr p}¨ ⊂[2]s ◊ →0
            > ⍝ -------------
            > Vector: p←,¨p ◊ z←s←,s ⋄ ⎕io←1
            > Loop:→((⍴p)<2)/0
            > (fr to)←2↑p ◊ p←2↓p
            > P←¯1↓∧/[1](¯1+⍳⍴fr)⌽fr∘.=z,⎕ucs 1
            > i←0
            > Sane: i←i+1
            > →(i>(⍴P)-⍴fr)/Subst
            > →(0=P[i])/Sane
            > ((⊂ i+¯1+⍳⍴fr)⌷P)←(⍴fr)↑1
            > →Sane
            > Subst: P←⌽(P/⍳⍴P)
            > ⊣ {z←((¯1+⍵)↑z),to,(¯1+⍵+⍴fr)↓z}¨P
            > →Loop
            >
            >
            > You can even try "⎕fx" the result if it looks like Ok. (ps: 
always check the result before committing)
            >
            > Substitutions are done in pair sequence for each 
/vector/matrix/embedded obj.
            >
            > So replace order is *very* important.
            >
            > It must still have some bugs, report them to me, with examples if 
so. Will do my best but no promises.
            >
            > Purpose: well, not sure, it was an exercise. I used it on itself 
to finally rename the function and change some variables/labels names.
            >
            >
            > Features: would be fun to pass parameters to each of the 
/from/to/ like maximum number of substitutions to do per line ...
            >          whole words only (taking apl characters as blanks) ... so variable 
"s" won't match last character of variable "pairs"
            >          ... no limits
            >
            >
            > Xtian.
            >
            >
            > On 2016-06-21 12:27, Juergen Sauermann wrote:
            >> Hi Xtian,
            >>
            >> how about this:
            >>
            >> *      
**s←"444This4is4a4444test44with44444lot4of4blanks4444at4beginning4and444end444444"**
            >>      from←"444"**
            >> **      to←"5"**
            >> **
            >> **      ↑⍎')HOST echo "',s,'" | sed s/',from,'/',to,'/g'**
            >> 
**5This4is4a54test44with544lot4of4blanks54at4beginning4and5end55**
            >> **  **
            >> *I have replaced the *^* in your example because it (and some 
other characters) have a special meaning in
            >> regular expressions. But the special characters can be easily 
quoted in APL if needed, for example:
            >>
            >> *      
s←"^^^This^is^a^^^^test^^with^^^^^lot^of^blanks^^^^at^beginning^and^^^end^^^^^^" **
            >> **      ((s='^')/s)←⊂'\^'**
            >> **      ⊃,/s**
            >> 
**\^\^\^This\^is\^a\^\^\^\^test\^\^with\^\^\^\^\^lot\^of\^blanks\^\^\^\^at\^beginning\^and\^\^\^end\^\^\^\^\^\^**
            >> *
            >> /// Jürgen
            >>
            >>
            >> On 06/21/2016 05:12 AM, Christian Robert wrote:
            >>> Hi, it's not a bug but a request for help,
            >>>
            >>>
            >>> suppose 
s="^^^This^is^a^^^^test^^with^^^^^lot^of^blanks^^^^at^beginning^and^^^end^^^^^^"
            >>> suppose from="^^^"
            >>> suppose to="^"
            >>>
            >>> I need a function who can replace ("^^^" to "^"), or ("^" to "^^^^^^^^") or 
("" to "blabla" with limits of source size)  ie: without being lost in infinite loop.
            >>>
            >>>
            >>>
            >>> "s" is a character vector, "from" is a character vector, and 
"to" is a character vector,
            >>> both "s", "from" and "to" can be "".
            >>>
            >>>
            >>>
            >>> I'm pretty sure this idiom already exist.
            >>>
            >>> if you can help me, please do.
            >>>
            >>> Xtian.
            >>>
            >>>
            >>>
            >>>
            >>>
            >>>
            >>







reply via email to

[Prev in Thread] Current Thread [Next in Thread]