File extension is in extensions list: Difference between revisions
Content added Content deleted
(Added Wren) |
(Separated task and extra task. Added code for task.) |
||
Line 1,261: | Line 1,261: | ||
=={{header|Nim}}== |
=={{header|Nim}}== |
||
===Task=== |
|||
For the task, it is possible to use the “splitFile” procedure from the standard module “os” as it split the extension at the last dot. |
|||
To build the extension list, we can use a compile time function: |
|||
<lang Nim>import os, strutils |
|||
let fileNameList = ["MyData.a##", "MyData.tar.Gz", "MyData.gzip", |
|||
"MyData.7z.backup", "MyData...", "MyData"] |
|||
func buildExtensionList(extensions: varargs[string]): seq[string] {.compileTime.} = |
|||
for ext in extensions: |
|||
result.add('.' & ext.toLowerAscii()) |
|||
const ExtList = buildExtensionList("zip", "rar", "7z", "gz", "archive", "A##") |
|||
for fileName in fileNameList: |
|||
echo fileName, ": ", fileName.splitFile().ext.toLowerAscii() in ExtList</lang> |
|||
Another way consists to use “map” from standard module “sequtils”: |
|||
<lang Nim>import os, sequtils, strutils |
|||
let fileNameList = ["MyData.a##", "MyData.tar.Gz", "MyData.gzip", |
|||
"MyData.7z.backup", "MyData...", "MyData"] |
|||
const ExtList = map(["zip", "rar", "7z", "gz", "archive", "A##"], |
|||
proc(ext: string): string = '.' & ext.toLowerAscii()) |
|||
for fileName in fileNameList: |
|||
echo fileName, ": ", fileName.splitFile().ext.toLowerAscii() in ExtList</lang> |
|||
{{out}} |
|||
<pre>MyData.a##: true |
|||
MyData.tar.Gz: true |
|||
MyData.gzip: false |
|||
MyData.7z.backup: false |
|||
MyData...: false |
|||
MyData: false</pre> |
|||
===Extra task=== |
|||
The “splitFile” procedure no longer works in this case. We have to use “endsWith” from the “strutils” module: |
|||
<lang nim>import strutils |
<lang nim>import strutils |
||
import sequtils |
import sequtils |