我正在使用Red binding来读写文件,而硬编码文件名版本效果很好。但我想动态地从命令行获取文件名。由于Red
现在没有这样的效用。所以我尝试使用Red/System
。我现在可以获得命令行参数,但我不知道如何将它传递给Red
部分。与下面的示例一样,我需要将source-file
和target-file
传递给read
和write
:
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
答案 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的方法,而其他人可以建议。