Sta*_*eap 5 string parsing ascii rebol red
前几天我偶然发现了RED语言并花了(或多或少字面)最后24小时"学习"它.我筋疲力尽的谷歌搜索技巧试图找到一个简单问题的解决方案,这个问题只是躲避我的技能和逻辑,所以希望有人在这里可以引导我走向正义之路.
正如标题所示,我试图解析一个简单的字符串(任何字符串的随机文本,真的),获取单个字符(acter)然后尝试将它们保存到变量中.(真的是另一个字符串/数组/任何类型)
我能做的最好的事情是代码使用:
alpha: charset [#"a" - #"z"]
testString: "this is just random rambling to test parsing!"
Run Code Online (Sandbox Code Playgroud)
当(试图)解析时作为先决条件和类似的东西:
probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end]
Run Code Online (Sandbox Code Playgroud)
将(第一个字母)ascii代码保存到text2并多次运行脚本正确地连续多次添加(相同的第一个字母)ASCII代码:
控制台输出
>> 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"
Run Code Online (Sandbox Code Playgroud)
显然,我的解析并不是真正"循环"字符串的各个字符,或者在执行时没有正确保存它们.也许我的解析真的需要从TO到END的整个字符串,然后我尝试将其转换为ASCII代码或其他事情发生在这里?
我将非常感谢任何帮助,因为在解决这个困境并理解解析在RED中是如何工作之前,我无法推进RED学习.
我不确定,我是否理解你的问题以及你想要实现的目标,但如果你正在寻找字符的所有 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]
Run Code Online (Sandbox Code Playgroud)
some是负责循环的可用单词之一
您的审判中存在一些问题。在进行任何转换之前它会给出一些错误。text2可能是之前声明过的。当您尝试复制到第一个字母字符时,to alpha会给出一个空字符串“” 。记得达到目标但不包括目标。您无法将空字符串转换为字符。如果我们假设到目前为止没有发生错误,那么您仍然位于字符串的前面,并且直接转到字符串的末尾。
关于 Red parse 的一些文档。请参阅关于循环的迭代
您可以使用parse-trace调试解析,也可以在要调查的规则部分后面放置一个简单的(探测文本) :