Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] %a*file? , wildcards with parse demo

From: agem:crosswinds at: 27-Mar-2001 22:38

[rebol [ title: "%a*file? , wildcards with parse demo" file: %wildcards.r date: 27-Mar-2001 author: "volker" purpose: { compile *? -style wildcards to parse-expression. workaround for the find/match/case/any -bug. also usable for sub-expressions in parse-patterns } ] the-test: :do ;switch test on ;the-test: none wildcards: func [file /local before-tail fix-pending-thru kpt append-pattern ap pattern ] [ pattern: copy [] ap: append-pattern: func [p] [if none <> p [append pattern p]] kpt: fix-pending-thru: func [replacement] [ before-tail: back tail pattern if 'thru = before-tail/1 [ insert remove before-tail replacement ] ] parse to string! file [ any [ copy p to "*" (ap p kpt [] ap [thru]) skip | copy p to "?" (ap p kpt [] ap [skip]) skip ] copy p to end (ap p) ] kpt [to end] pattern ] matching-wildcard: func [file block /local pattern matching ] [ matching: copy [] pattern: wildcards file foreach f block [ if parse/case to string! f pattern [append matching f] ] matching ] ;------------------ the-test [ test: func [file] [ matching: matching-wildcard file test-cases not-matching: exclude/case test-cases matching ? file ? pattern ? matching ? not-matching print "" ] test-all: func [block] [ foreach pat block [test pat] ] test-cases: [%a %ab %aba %abc %ac %aB %AbC %And-So-On] ;test-cases: read %. ? test-cases test-all [ %* %a??b %a**b %a*?b %a?*b %? %abc %A* %C* %*C* %a*b*c %*a %*a* %*a*c* %ab* %*A*S*O* ] ] ]