【问题标题】:Rebol/RED parsing. Save ASCII codes from parsed string to variable?Rebol/RED 解析。将 ASCII 代码从解析的字符串保存到变量?
【发布时间】:2017-10-01 11:17:33
【问题描述】:

前几天我偶然发现了 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 代码:

控制台输出

>> 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 学习方面取得进步。

【问题讨论】:

  • 使用parse-trace进行调试
  • 我认为您在要重现的先决条件测试代码中遗漏了一些东西,例如 text2: ""
  • 非常正确,确实没有声明 text2。看起来是一个草率的粘贴,对不起。
  • 欢迎来到红语!几天前我遇到了类似的问题:stackoverflow.com/questions/46260181/…

标签: string parsing ascii rebol red


【解决方案1】:

我不确定,如果我理解您的问题以及您想要实现的目标,但如果您正在寻找字符的所有 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]

some 是负责循环的可用词之一

您的试用版存在一些问题。在进行任何转换之前它会给出一些错误。 text2 可能在之前声明过。当您尝试复制到第一个字母字符时,to alpha 会给出一个空字符串 ""。记住 to 上升到但不包括目标。您不能将空字符串转换为字符。如果我们假设到目前为止没有发生错误,那么你仍然在你的字符串前面,你直接走到你的字符串的末尾。

一些documentation about Red parse。请参阅有关循环的迭代

您可以使用 parse-trace 调试您的解析,也可以在您要调查的规则部分之后放置一个简单的 (探测文本)

【讨论】:

  • 谢谢,这正是我想要达到的目标。您能解释一下我的代码中发生了什么以及为什么它只给出了第一个字符(的 ASCII 码)吗?它是否在我的解析条件之间返回了整个字符串,然后“to-char 和 to-integer”将其转换为单个字符及其 ascii 代码?
  • 不喜欢收集? collect [parse [... (keep to integer! a) ...]](或者如果只有红色 parse [collect [some [... keep (to integer! a) ...]]]
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多