Extract file extension: Difference between revisions

(→‎{{header|ALGOL W}}: Changed test cases to be those of the revised tas.)
Line 1,119:
=={{header|zkl}}==
The File object has a method splitFileName that does just that, returning a list of the parts. The method knows about the OS it was compiled on (Unix, Windows).
<lang zkl>valid:=Walker.chain(".",["a".."z"],["A".."Z"],["0".."9")).sink(String).walk();
<lang zkl>T("picture.jpg","http://mywebsite.com/picture/image.png",
foreach nm in (T("http://example.com/download.tar.gz","CharacterModel.3DS",
"myuniquefile.longextension","IAmAFileWithoutExtension",
".desktop","document",
"/path/to.my/file","file.odd_one").apply(File.splitFileName).println();</lang>
"document.txt_backup","/etc/pam.d/login")){
ext:=File.splitFileName(fileNamenm)[-1];
if(ext-valid) ext="";
println("%35s : %s".fmt(nm,ext));
}</lang>
{{out}}
Note: on Unix, .desktop is a hidden file, not an extension.
<pre>
http://example.com/download.tar.gz : .gz
L(L("","","picture",".jpg"),
CharacterModel.3DS : .3DS
L("","http://mywebsite.com/picture/","image",".png"),
.desktop :
L("","","myuniquefile",".longextension"),
document :
L("","","IAmAFileWithoutExtension",""),
document.txt_backup :
L("","/path/to.my/","file",""),
/etc/pam.d/login :
L("","","file",".odd_one"))
</pre>
The last one is an odd duck so some code is in order:
<lang zkl>fcn exonly(fileName){
var re=RegExp(0'|\.[a-zA-Z0-9]+$|);
ext:=File.splitFileName(fileName)[-1];
if(not re.matches(ext)) return("");
ext
}</lang>
<lang zkl>T("picture.jpg","http://mywebsite.com/picture/image.png",
"myuniquefile.longextension","IAmAFileWithoutExtension",
"/path/to.my/file","file.odd_one").apply(exonly).println();</lang>
{{out}}
<pre>L(".jpg",".png",".longextension","","","")</pre>
Anonymous user