|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.01.2018, 16:10 | #1 |
Регистрация: 11.01.2018
Сообщений: 3
|
Форматирование списка телефонных номеров - Haskell
Имеется некий список телефонных номеров, необходимо привести их к общему виду для региона:
+7хххххххххх; Если в номере телефона больше или меньше цифр, чем необходимо вывести соответствующее сообщение, результатом будет являться список отформатированных номеров, а также номера, не соответствующие формату (неверные номера) Таким образом номера которые начинаются с "8" или "+7", а также которые состоят из 11 (если начинается на 8) или 12 (если начинается с +7). Как добавить еще одно условие к нижеприведенному коду. "Если номер состоит из 7-ми цифр, то добавить к нему "+7343". Например если имеется номер 2494996, то вывести +73432494996. На данный момент выполняются условия с 11 и 12 цифрами в номере. data Result a = Ok a | Error String deriving (Show, Eq) errorInvalidFormat s = Error $ "Invalid phone number format: " ++ s normalizePhoneNumber :: String -> Result String normalizePhoneNumber n = case n of ( '8':num) -> check num n ('+':'7':num) -> check num n _ -> errorInvalidFormat n where check num orig | length num == 10 = Ok ("+7" ++ num) | otherwise = errorInvalidFormat n normalizePhoneNumbers :: [String] -> ([String], [String]) normalizePhoneNumbers = foldl merge ([], []) . map normalizePhoneNumber where merge (oks, errors) (Ok num) = (numks, errors) merge (oks, errors) (Error err) = (oks, err:errors) testPhoneNumbers = [ "1234567890" , "+71234567890" , "80987654321" , "312327123654" ] main = let (numbers, errors) = normalizePhoneNumbers testPhoneNumbers in do mapM_ putStrLn numbers putStrLn "" putStrLn "ERRORS:" mapM_ putStrLn errors |
11.01.2018, 17:00 | #2 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Ну, алгоритм-то понятен. А чо такое Haskel?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
11.01.2018, 22:53 | #4 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Если "в лоб", то как-то так:
Код:
|
12.01.2018, 15:35 | #5 |
Регистрация: 11.01.2018
Сообщений: 3
|
благодарю, помогло
|
12.01.2018, 16:52 | #6 |
Регистрация: 11.01.2018
Сообщений: 3
|
а можно всю эту задачу выполнить с использованием библиотеки parsec?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сохранение нескольких телефонных номеров клиента | Xezon | Общие вопросы по программированию, компьютерный форум | 3 | 22.05.2016 11:56 |
маска ввода для нескольких телефонных номеров в одном поле | ТипичныйСтудент | Помощь студентам | 1 | 31.01.2016 03:10 |
Массивы, удаление четных номеров, обнаружение максимальных номеров. | Memorial | Помощь студентам | 2 | 18.10.2011 22:58 |
Импорт телефонных номеров из excel в access | jen9tko | Microsoft Office Access | 0 | 08.11.2010 15:34 |
БД телефонных номеров | ElenaOrsk | Общие вопросы Delphi | 0 | 31.05.2009 12:25 |