Extract file extension: Difference between revisions

→‎{{header|Racket}}: Several Improvements
(→‎{{header|Racket}}: Several Improvements)
Line 240:
<lang Racket>#lang racket
 
;; Note that for a real implementation, Racket has a
(define (string-suffix x)
;; `filename-extension` in its standard library, but don't use it here
(define v (regexp-match #px"\\.[[:alnum:]]+$" x))
;; since it requires a proper name (fails on ""), returns a byte-string,
(if v
;; and handles path values so might run into problems with unicode
(car v)
;; string inputs.
""))
 
(define (string-suffix/unicodeextension x)
(define vcadr (regexp-match #px"(\\.(?[[:alnum:\\p{L}]]+|\\p{N}|\\p{M})+$" x)))
(if v
(car v)
""))
 
(define (string-suffixextension/unicode x)
(define examples (list "picture.jpg"
(define vcadr (regexp-match #px"(\\.[[(?:alnum:]]\\p{L}|\\p{N}|\\p{M})+|)$" x)))
"http://mywebsite.com/picture/image.png"
"myuniquefile.longextension"
"IAmAFileWithoutExtension"
"/path/to.my/file"
"file.odd_one"
""
;Extra, with unicode
"café.png"
"file.resumé"
; with unicode combining characters
"cafe\u0301.png"
"file.resume\u0301"))
 
(define examples '(list "picture.jpg"
(displayln "Official task")
"http://mywebsite.com/picture/image.png"
(for-each (lambda (x) (printf "~s ==> ~s\n" x (string-suffix x)))
examples) "myuniquefile.longextension"
"IAmAFileWithoutExtension"
(newline)
"myuniquefile/path/to.longextensionmy/file"
"/path/to.my/file.odd_one"
""
;; Extra, with unicode
"café.png"
"file.odd_oneresumé"
;; with unicode combining characters
"cafe\u0301.png"
"file.resuméresume\u0301"))
 
(displaylnprintf "Official task:\n")
(for ([x (in-list examples)])
(for-each (lambda (x) (printf "~s ==> ~s\n" x (string-suffixextension x)))
 
(displaylnprintf "With\nWith unicode support:\n")
(for ([x (in-list examples)])
(for-each (lambda (x) (printf "~s ==> ~s\n" x (string-suffixextension/unicode x)))
</lang>
 
(displayln "With unicode support")
(for-each (lambda (x) (printf "~s ==> ~s\n" x (string-suffix/unicode x)))
examples)</lang>
{{out}}
<pre>Official task:
"picture.jpg" ==> ".jpg"
"http://mywebsite.com/picture/image.png" ==> ".png"
"myuniquefile.longextension" ==> ".longextension"
"IAmAFileWithoutExtension" ==> ""
"/path/to.my/file" ==> ""
"file.odd_one" ==> ""
"" ==> ""
"café.png" ==> ".png"
"file.resumé" ==> ""
"café.png" ==> ".png"
"file.resumé" ==> ""
 
With unicode support:
"picture.jpg" ==> ".jpg"
"http://mywebsite.com/picture/image.png" ==> ".png"
"myuniquefile.longextension" ==> ".longextension"
"IAmAFileWithoutExtension" ==> ""
"/path/to.my/file" ==> ""
"file.odd_one" ==> ""
"" ==> ""
"café.png" ==> ".png"
"file.resumé" ==> ".resumé"
"café.png" ==> ".png"
"file.resumé" ==> ".resumé"</pre>
</pre>
 
=={{header|REXX}}==