【问题标题】:Multi-line text values in Dyalog APLDyalog APL 中的多行文本值
【发布时间】:2017-08-14 19:19:10
【问题描述】:

如何在 Dyalog APL 中编写多行文本值?

我想编写如下代码:

query←'
SELECT *
FROM SOME_TABLE
'

能够将此文本复制到 SQL Developer 并返回。

我知道我可以这样编码:

query←''
query,←'SELECT * '
query,←'FROM SOME_TABLE '

但它不允许我将此文本复制到 SQL Developer 并轻松返回。

是否可以临时覆盖 Dyalog APL 函数源代码中的换行符?

【问题讨论】:

    标签: apl dyalog


    【解决方案1】:

    恐怕多行字符串不存在(我希望如此)。

    解决这个问题的唯一方法是按如下方式编写:

    query←ScriptFollows
    ⍝ SELECT *
    ⍝ FROM Some_Table
    

    从 SQL Dev 粘贴时,选择插入的文本,然后单击编辑器工具栏上的 按钮,在每一行插入注释符号。

    如果使用IDE,单击并按住鼠标右键选择一个没有注释符号的矩形块。

    P.S:您需要定义 fn ScriptFollows - 这是一种方法(由 Brian Becker 提供):

    ∇ r←ScriptFollows;lines;pgm;from
     ⍝ Treat following commented lines in caller as a script, lines beginning with ⍝⍝ are stripped out
      :If 0∊⍴lines←(from←⎕IO⊃⎕RSI).⎕NR pgm←2⊃⎕SI
          lines←↓from.(180⌶)pgm
      :EndIf
      r←2↓∊CRLF∘,¨{⍵/⍨'⍝'≠⊃¨⍵}{1↓¨⍵/⍨∧\'⍝'=⊃¨⍵}dtlb¨(1+2⊃⎕LC)↓lines
    ∇
    

    【讨论】:

      【解决方案2】:

      该功能实际上在多年前基于 APL\360 的(大型机)系统上可用,例如 Sharp APL(在 1980 年左右被删除?)、STSC APL*Plus 等。除其他事项外,不再可能使用普通的 del 编辑器返回编辑带有嵌入式回车的行(全屏编辑器,因此,尚不存在)。它已被删除,因为它可能会让用户感到困惑 - 系统需要一个结束报价,而只是按 return 并没有隐含地提供一个。

      【讨论】:

        【解决方案3】:
        S←{a←⍺⍺⋄,⎕cr'a'}
        query←{
         SELECT *
         FROM Some_Table
        }S⍬
        

        【讨论】:

        • 不错的技巧,谢谢。它有一些问题:1)查询被'a←{'和'}'包围,带有一些空格2)不支持查询中的'}'字符(在字符串常量中)3)Dyalog APL格式化查询它自己的方式。修剪可以这样完成:query←(query⍳'{')↓(¯1+query⍳'}')↑query
        猜你喜欢
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 2022-01-27
        • 2020-06-27
        相关资源
        最近更新 更多