假设我有一个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”
那怎么样?
答案 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源数据格式(或者由具有某些期望的人类读者阅读),那么您使用的是错误的函数。您需要使用read
和write
进行排名和文件序列化。
答案 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!