【问题标题】:How to create newline in a rebol block?如何在 rebol 块中创建换行符?
【发布时间】:2010-06-15 23:08:44
【问题描述】:

假设我有一个 config.txt,其中包含:

"param11" "param12"

"param21" "param22"

我会把它加载到内存中

config: load %config.txt

我可以把它保存回来

save %config.txt config

到目前为止一切顺利。现在我想添加时出现问题

"param31" "param32"

我试过了

append config reduce [newline "param31" "param32"]
save %config.txt config

但这并没有给出预期的结果

"param11" "param12"

"param21" "param22"

"param31" "param32"

但是这个

"param11" "param12"

"param21" "param22" #"^/" "param31" "param32"

那么怎么做呢?

【问题讨论】:

    标签: rebol


    【解决方案1】:

    我们知道:

    [a
     b]
    

    [a b]
    

    ...被视为与 Rebol “源代码”相同,它们描述相同的数据结构。我们也知道 Rebol 是 reflective 并且可以通过 LOAD 和 SAVE 读写其代码/数据格式。

    然而这提出了一个问题:如果你加载一个带有换行符的源文件......然后保存它......输出中是否会有换行符?还是会被强制转换成规范格式?

    (有关 LOAD 和 SAVE 古怪的一些疯狂背景,请阅读 my debate with BrianH...在那里你看到我制作了一个坚固的案例,而他像往常一样对我不屑一顾。令人沮丧的是不和与“大师”一起,无论他们多么聪明。:P)

    无论如何,您必须意识到 Rebol 正在努力变得聪明。隐藏在幕后的二进制“换行符”位,执行help new-line,您会看到:

    USAGE:
        NEW-LINE block value /all /skip size
    
    DESCRIPTION:
    Sets or clears the new-line marker within a block. (Modifies)
    NEW-LINE is a native value.
    
    ARGUMENTS:
    block -- Position in block to change marker (block!)
    value -- Set TRUE for newline
    
    REFINEMENTS:
    /all -- Set/clear marker to end of block
    /skip -- Set/clear marker periodically to the end of the block
        size (integer!)
    

    因此,如果您想玩 Rebol 源代码游戏并使用 LOAD 和 SAVE,则必须调用此 API 以将“换行”位注入param22。但是要意识到,如果您的数据必须符合非 Rebol 源线格式(或由具有某些期望的人类读者阅读),那么您使用的函数是错误的。您需要使用readwrite 进行rank-and-file 序列化。

    【讨论】:

    • 从来没有听说过换行无论如何会有用,而且这个周末会读维基似乎很有趣:)
    【解决方案2】:

    正如 Fork 所说,加载/保存是针对 Rebol 可读数据的。读/写是一般用途。

    write/append %config.txt reform [newline "param31" "param32"]
    

    适用于您的情况。 %config.txt 仍然可以加载。

    【讨论】:

      【解决方案3】:

      不正确:写入/追加 %config.txt 修改 [newline "param31" "param32"]

      答案 #1 不太正确。以下是使用编辑器应用查看文本文件时的结果:

      "param11" "param12" 
      
      "param21" "param22"
      
      param31 param32
      

      这是在写入/追加后加载文件的结果:

      >> write/append %config.txt reform [newline "param31" "param32"]
      
      >> a: load %config.txt
      
      == ["param11" "param12"
      
          "param21" "param22"
      
          param31 param32
      
      ]
      

      因此 param31 和 param32 不是保存为字符串而是保存为单词。

      >> first a
      
      == "param11"
      
      >> type? first a
      
      == string!
      
      >> fifth a
      
      == param31
      
      >> type? fifth a
      
      == word!
      

      右:写入/追加 %config.txt 修改 [newline Mold "param31" Mold "param32"]

      >> write/append %config.txt reform [newline mold "param31" mold "param32"]
      
      >> b: load %config.txt
      
      == ["param11" "param12"
      
          "param21" "param22"
      
          "param31" "param32"
      
      ]
      
      >> type? b/5
      
      == string!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 2012-02-28
        • 2011-07-08
        • 2011-05-13
        相关资源
        最近更新 更多