如何使用PARSE与COLLECT / KEEP来获取文件路径(带斜杠)和文件名?

时间:2014-04-26 01:09:54

标签: parsing filepath red

我试图拿一个文件!字符串类型并将其分为两部分。一个是目录中最后一个斜杠的所有部分,一个只是文件本身的名称。

我试过了:

>> parse %dir/other-dir/file.ext [collect [keep thru [any thru %/] keep to end]]

但这只是给了我全名[%dir/other-dir/file.ext]我希望获得两个元素块[%dir/other-dir/ file.ext]

(如果我提供了[none file.ext]之类的输入,我也很喜欢%file.ext

1 个答案:

答案 0 :(得分:3)

你已经过得太多了。

red>> parse %abc/file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [%abc/ %file.ext]
red>> parse %/abc/file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [%/abc/ %file.ext]
red>> parse %/abc/def/file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [%/abc/def/ %file.ext]

我正在使用'一些,因此规则失败,如果输入中没有斜线。然后使用" |保持(无)"保持你想要的一切。

"保持(某事)"保持运行的返回值"某事"通过“做方言”。

red>> parse %file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [none %file.ext]

没有它,你只能获得文件部分。

red>> parse %file.ext [collect[keep [any [thru #"/"]] keep to end]]
== [%file.ext]

red>> parse %/abc/def/file.ext [collect[keep [any [thru #"/"]] keep to end]]
== [%/abc/def/ %file.ext]