前几天我偶然发现了RED语言并花了(或多或少字面)最后24小时“学习”它。我已经用尽了谷歌的谷歌搜索技巧,试图找到一个简单问题的解决方案,这个问题只会躲避我的技能和逻辑,所以希望有人能带领我走向正义之路。
正如标题所示,我试图解析一个简单的字符串(任何字符串的随机文本,真的),获取单个字符(acter)然后尝试将它们保存到变量中。 (真的是另一个字符串/数组/任何类型)
我能做的最好的事情就是使用代码:
alpha: charset [#"a" - #"z"]
testString: "this is just random rambling to test parsing!"
作为先决条件和类似的东西(尝试)解析时:
probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end]
将(第一个字母)ascii代码保存到text2并多次运行脚本正确地连续多次添加(相同的第一个字母)ASCII代码:
CONSOLE OUTPUT
>> probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end]
true
== true
>> probe text2
"34"
== "34"
>> probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end]
true
== true
>> probe text2
"3434"
== "3434"
显然,我的解析并不是真正“循环”字符串的各个字符,或者在执行时没有正确保存它们。也许我的解析真的需要从TO到END的整个字符串,然后我尝试将其转换为ASCII代码或其他东西在这里发生?
任何帮助将不胜感激,因为在解决这个难题并理解解析在RED中是如何工作之前,我无法推进RED学习。
答案 0 :(得分:3)
我不确定,如果我理解你的问题以及你想要实现的目标,但是如果你正在寻找所有字符的ascii表示,你可以用
asciis: []
parse teststring [some [set a alpha (append asciis to-integer a )| skip]]
== true
>> asciis
== [116 104 105 115 105 115 106 117 115 116 114 97 110 100 111 109 114 97 109 98 108 105 110 103 116 111 116 101 115 116 112 97 114 115 105 110 103]
某些是负责循环的可用单词之一
您的试用版存在一些问题。在进行任何转换之前会出现一些错误。之前可能声明了 text2 。当您尝试复制到第一个字母字符时,到alpha 会给出一个空字符串“”。请记住到上升到不包括目标。您不能将空字符串转换为字符。如果我们假设直到现在没有发生错误,那么你仍然在你的字符串前面,你直接到你的字符串的末尾。
一些documentation about Red parse。请参阅有关循环的迭代
您可以使用 parse-trace 调试解析,或者只是在要调查的规则部分之后放置一个简单的(探测文本):