Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2018, 16:10   #1
Angelher
 
Регистрация: 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
Angelher вне форума Ответить с цитированием
Старый 11.01.2018, 17:00   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Ну, алгоритм-то понятен. А чо такое Haskel?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.01.2018, 17:05   #3
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
А чо такое Haskel?
Haskell - это язык программирования.
Streletz вне форума Ответить с цитированием
Старый 11.01.2018, 22:53   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Если "в лоб", то как-то так:
Код:
normalizePhoneNumber :: String -> Result String
normalizePhoneNumber n = case n of
    ( '8':num) -> check10 num n
    ('+':'7':num) -> check10 num n
    _ -> check7 n
    where
        check10 num orig
            | length num == 10 = Ok ("+7" ++ num)
            | otherwise = errorInvalidFormat orig
        check7 num 
            | length num == 7 = Ok ("+7343" ++ num)
            | otherwise = errorInvalidFormat num
Black Fregat вне форума Ответить с цитированием
Старый 12.01.2018, 15:35   #5
Angelher
 
Регистрация: 11.01.2018
Сообщений: 3
По умолчанию

благодарю, помогло
Angelher вне форума Ответить с цитированием
Старый 12.01.2018, 16:52   #6
Angelher
 
Регистрация: 11.01.2018
Сообщений: 3
По умолчанию

а можно всю эту задачу выполнить с использованием библиотеки parsec?
Angelher вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение нескольких телефонных номеров клиента 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