-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRemoveAndReport.hs
56 lines (42 loc) · 3.65 KB
/
RemoveAndReport.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{-
На этом шаге вы будете работать с монадой IO, а значит, ваша программа будет взаимодействовать с операционной системой.
Чтобы тестирующая система смогла оценить вашу программу, пожалуйста, используйте только функции, работающие с файлами
и директориями: getDirectoryContents, removeFile. Все эти функции уже будут находиться в области видимости, так что
вам не следует их импортировать. По той же причине, главная функция вашей программы будет называться не main, а main'
(со штрихом).
В этом задании ваша программа должна попросить пользователя ввести любую строку, а затем удалить все файлы в текущей
директории, в именах которых содержится эта строка, выдавая при этом соответствующие сообщения.
Substring:
Пользователь вводит любую строку:
Substring: hell
Затем программа удаляет из текущей директории файлы с введенной подстрокой в названии. К примеру, если в текущей
директории находились файлы thesis.txt, kitten.jpg, hello.world, linux_in_nutshell.pdf, то вывод будет таким:
Substring: hell
Removing file: hello.world
Removing file: linux_in_nutshell.pdf
Если же пользователь ничего не ввёл (просто нажал Enter), следует ничего не удалять и сообщить об этом:
Substring:
Canceled
Для получения списка файлов в текущей директории используйте функцию getDirectoryContents, передавая ей в качестве
аргумента строку, состоящую из одной точки ("."), что означает «текущая директория». Для удаления файлов используйте
функцию removeFile (считайте, что в текущей директории нет поддиректорий — только простые файлы). В выводимых
сообщениях удаленные файлы должны быть перечислены в том же порядке, в котором их возвращает функция getDirectoryContents.
Пожалуйста, строго соблюдайте приведенный в примере формат вывода. Особое внимание уделите пробелам и переводам строк!
Не забудьте про пробел после Substring:, а также про перевод строки в конце
(ожидается, что вы будете использовать putStrLn для вывода сообщений об удалении).
-}
import Data.List
main' :: IO ()
main' = do
putStr "Substring: "
substr <- getLine
if null substr
then putStrLn "Canceled"
else do
files <- getDirectoryContents "."
let filesToRemove = filter (isInfixOf substr) files
mapM_ removeAndReport filesToRemove
removeAndReport :: FilePath -> IO ()
removeAndReport file = do
removeFile file
putStrLn $ "Removing file: " ++ file