Extract file extension: Difference between revisions

Content added Content deleted
No edit summary
(Add Forth)
Line 346: Line 346:
(file-name-extension "foo.txt.~1.234~") => "txt"</lang>
(file-name-extension "foo.txt.~1.234~") => "txt"</lang>


=={{header|Forth}}==
<lang forth>: invalid? ( c -- f )
toupper dup [char] A [char] Z 1+ within
swap [char] 0 [char] 9 1+ within or 0= ;
: extension ( addr1 u1 -- addr2 u2 )
dup 0= if exit then
2dup over +
begin 1- 2dup <= while dup c@ invalid? until then
\ no '.' found
2dup - 0> if 2drop dup /string exit then
\ invalid char
dup c@ [char] . <> if 2drop dup /string exit then
swap -
\ '.' is last char
2dup 1+ = if drop dup then
/string ;

: type.quoted ( addr u -- )
[char] ' emit type [char] ' emit ;
: test ( addr u -- )
2dup type.quoted ." => " extension type.quoted cr ;
: tests
s" picture.jpg" test
s" http://mywebsite.com/picture/image.png" test
s" myuniquefile.longextension" test
s" IAmAFileWithoutExtension" test
s" /path/to.my/file" test
s" file.odd_one" test
s" IDontHaveAnExtension." test ;</lang>
{{out}}
<pre>cr tests
'picture.jpg' => '.jpg'
'http://mywebsite.com/picture/image.png' => '.png'
'myuniquefile.longextension' => '.longextension'
'IAmAFileWithoutExtension' => ''
'/path/to.my/file' => ''
'file.odd_one' => ''
'IDontHaveAnExtension.' => ''
ok</pre>
=={{header|Go}}==
=={{header|Go}}==
<lang go>package main
<lang go>package main