如何从Red文件中的Red / System部分获取值

时间:2014-11-10 16:46:25

标签: red

我正在使用Red binding来读写文件,而硬编码文件名版本效果很好。但我想动态地从命令行获取文件名。由于Red现在没有这样的效用。所以我尝试使用Red/System。我现在可以获得命令行参数,但我不知道如何将它传递给Red部分。与下面的示例一样,我需要将source-filetarget-file传递给readwrite

Red []

#include %input-output.red

#system-global [
    args: system/args-list
    args: args + 1
    source-file: args/item
    args: args + 1
    target-file: args/item

    print [source-file target-file ]

]

data: read source-file
probe data
write target-file data

2 个答案:

答案 0 :(得分:2)

这样的事情应该可行,只需将你的#system-global代码转换为例程函数:

Red [
    File: "test-read.red"
]

read-arg: routine [
    files [block!]
    /local
        str  [red-string!]
        args [str-array!]
][
    args: system/args-list
    args: args + 1

    str: string/load symbol/duplicate args/item  1 + length? args/item UTF-8
    block/rs-append files as red-value! str

    args: args + 1
    str: string/load symbol/duplicate args/item  1 + length? args/item UTF-8
    block/rs-append files as red-value! str
]

probe read-arg []

然后编译后,你应该得到这个结果:

C:\Dev\Red>test-read fileA fileB
["fileA" "fileB"]

答案 1 :(得分:1)

假设读写函数的参数是string!,你需要编写一个返回红色字符串的例程!红色/系统c字符串!。

由于Nenad正在努力获得Red 1.0,因此Red API尚未被记录。这是一个相反的功能,字符串!到c-string!这可能有助于显示所需内容 - https://github.com/PeterWAWood/Red-System-Libs/blob/master/UTF8/string-c-string.reds

可能有一种更容易使用Red api的方法,而其他人可以建议。