我正在尝试解析一些格式如下的数据。
data: [a b x b x x b a a x x b b x ]
我需要它按顺序提取a和b,并为每个a和b执行不同的操作。
预期输出为:
a
b
b
b
a
a
b
b
== true
到目前为止,我已经提出了这个问题,但它重复了一次失败了。
parse data [
some [
thru 'a (print "a")
some [
any [
to 'b (print "b")
]
to 'a
]
]
to end
]
任何指针?感谢
答案 0 :(得分:4)
我可能会遗漏某些东西......但不是你想要的东西:
parse data [
any [
thru ['a (print "a") | 'b (print "b")]
]
to end
]
生成您请求的输出。
答案 1 :(得分:4)
>> data: [a b x b x x b a a x x b b x ]
== [a b x b x x b a a x x b b x]
>> parse data [ some [ 'a (print "a") | 'b (print "b") | skip ] ]
a
b
b
b
a
a
b
b
== true
答案 2 :(得分:3)
这是to
和thru
,你真的不需要它们。让我们在这里利用R3而不用。
parse data [
some [
'a (print "a")
any [
'b (print "b") |
and 'a break |
skip
]
]
to end
]
and
进行预测,break
突破any
规则。这可以让你在到达下一个开头时停止内循环。
to
和thru
会跳过您不想跳过的内容,而在代码中to 'b
的情况下,它实际上并没有做任何事情大多数时候。你很幸运,你包裹any
的{{1}}循环在R3中被更改,如果它没有前进则不会继续,因为它没有前进。
至于您的第一个问题,to 'b
之后的内部some
应该是(print "a")
,以使其成为可选项。 any
不是可选的,因此对于没有中间数据的some
的运行不起作用。
PARSE可能很棘手,但你可以掌握它。