如何在rebol块中创建换行符?

时间:2010-06-15 23:08:44

标签: rebol

假设我有一个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”

那怎么样?

3 个答案:

答案 0 :(得分:3)

我们知道:

[a
 b]

[a b]

...与Rebol“源代码”相同,它们描述了相同的数据结构。我们也知道Rebol是反射,可以通过LOAD和SAVE读写代码/数据格式。

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

(关于LOAD和SAVE wackiness的一些疯狂背景,请阅读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进行排名和文件序列化。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

NOT RIGHT:写/附加%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改革[换行模具“param31”模具“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!