File extension is in extensions list: Difference between revisions

Content deleted Content added
Hout (talk | contribs)
m →‎{{header|Haskell}}: Pruned out some noise
Hout (talk | contribs)
m →‎{{header|Haskell}}: (Tidied test section)
Line 858:
MyData_v1.0.tar.bz2 True
MyData_v1.0.bz2 False</pre>
 
 
We can also express this directly in terms of the '''isSuffix''' function, taking care not to reproduce the small glitch in the draft above, which shows a false positive for '''zip''' in '''.gzip''' (see task description bullet 2).
Line 864 ⟶ 865:
import Data.Maybe (fromMaybe)
import Data.Char (toLower)
 
 
extensionFound :: [String] -> [String] -> Maybe String
extensionFound fp xs fp = find (`isSuffixOf` fp) (('.' :) <$> xs)
 
 
-- TESTS --------------------------------------------------
main :: IO ()
main = do
(putStrLn . unlines) $
let w = maximum $ length <$> files
fTable
(putStrLn . unlines) $
"Any matching extensions found:\n"
zipWith
id
(\fp mb -> rjust w ' ' fp ++ " -> " ++ fromMaybe "n/a" mb)
(fromMaybe files"n/a")
((`extensionFound` lcased extensions) <$> lcased files)
extensions = (lcased ["zip", "rar", "7z", "gz", "archive", "A##", "tar.bz2"]))
(lcased
-- DATA ---------------------------------------------------
, [ "MyData...a##"
extensions, files :: [String]
, "MyData.tar.Gz -> .gz"
extensions = ["zip", "rar", "7z", "gz", "archive", "A##", "tar.bz2"]
, "MyData.gzip"
<pre> , "MyData.a## -> 7z.a##backup"
files =
[ , "MyData.a##.."
, "MyData.tar.Gz"
, "MyDataMyData_v1.0.tar.gzipbz2"
, "MyDataMyData_v1.7z0.backupbz2"
])
, "MyData..."
 
, "MyData"
 
, "MyData_v1.0.tar.bz2"
, "MyData_v1.0.bz2"
]
-- STRINGS ------------------------------------------------
 
rjust :: Int -> Char -> String -> String
fTable :: String -> (a -> String) -> (b -> String) -> (a -> b) -> [a] -> String
rjust n c = (drop . length) <*> (replicate n c ++)
fTable s xShow fxShow f xs =
let w = maximum $ (length . xShow <$> filesxs)
rjust n c = (drop . length) <*> (replicate n c ++)
in unlines $
s : fmap (((++) . rjust w ' ' . xShow) <*> ((" -> " ++) . fxShow . f)) xs
 
lcased :: [String] -> [String]
lcased = fmap (fmap toLower)</lang>
{{Out}}
<pre>Any matching extensions found:
<pre> MyData.a## -> .a##
 
MyData.tar.Gz -> .gz
MyData mydata.gzipa## -> n/.a##
MyData mydata.7ztar.backupgz -> n/a.gz
MyData..mydata.gzip -> n/a
MyDatamydata.7z.backup -> n/a
mydata... -> n/a
MyData_v1.0.tar.bz2 -> .tar.bz2
MyData_v1.0.bz2 mydata -> n/a</pre>
MyData_v1mydata_v1.0.tar.bz2 -> .tar.bz2
mydata_v1.0.bz2 -> n/a</pre>
 
=={{header|J}}==