Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 11.01.2018, 17:10   #1
Angelher
Новичок
 
Регистрация: 11.01.2018
Сообщений: 3
Репутация: 10
По умолчанию Форматирование списка телефонных номеров - 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, 18:00   #2
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 7,648
Репутация: 2371

icq: 100500
skype: kick-ass
По умолчанию

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

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

Если "в лоб", то как-то так:
Код:

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, 16:35   #5
Angelher
Новичок
 
Регистрация: 11.01.2018
Сообщений: 3
Репутация: 10
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение нескольких телефонных номеров клиента Xezon Общие вопросы по программированию, компьютерным наукам 3 22.05.2016 12:56
маска ввода для нескольких телефонных номеров в одном поле ТипичныйСтудент Помощь студентам 1 31.01.2016 04:10
Массивы, удаление четных номеров, обнаружение максимальных номеров. Memorial Помощь студентам 2 18.10.2011 22:58
Импорт телефонных номеров из excel в access jen9tko Microsoft Office Access 0 08.11.2010 16:34
БД телефонных номеров ElenaOrsk Общие вопросы Delphi 0 31.05.2009 12:25


17:56.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru