2

ファイルを取得しようとしています! 文字列型で、2 つの部分に変換します。1 つはディレクトリの最後のスラッシュまでのすべての部分であり、もう 1 つはファイル自体の名前だけです。

私はこれを試しました:

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

しかし、それ[%dir/other-dir/file.ext] は 2 要素ブロックを取得したかった完全な名前を返すだけです[%dir/other-dir/ file.ext]

(私は[none file.ext]ちょうどのような入力を与えていたらいいのに%file.ext

4

1 に答える 1

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]

入力にスラッシュがない場合、ルールが失敗するように「some」を使用しています。次に、「| keep (none)」を使用すると、「none you want」が保持されます。

「keep (something)」は、「do 方言」を介して「something」を実行した場合の戻り値を保持します。

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]
于 2014-04-26T20:02:50.530 に答える