Hi,
if I compare
⎕FIO['fopen'] with FIO∆fopen,
⎕FIO['fread'] with FIO∆fread,
⎕FIO['fclose'] with FIO∆fclose,
and so on,
then I would say that the FIO∆ variants are more readable
(and also faster) than
the ⎕FIO[] variants.
/// Jürgen
On 06/22/2016 05:54 AM, Christian
Robert wrote:
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.
>>>
>>>
>>>
>>>
>>>
>>>
>>
|