Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
1

Разбор url адреса с библиотекой Parsec

14.06.2017, 17:18. Просмотров 895. Ответов 10

Хочу разобрать url адрес. До "www" разбор происходит нормально.
Дальше возникла проблема - "www" может не быть в адресе.
Безуспешно пытаюсь применить try:
Haskell
1
2
3
4
import Text.Parsec.ByteString as PSBSL (GenParser (..), Parser)
import Text.ParserCombinators.Parsec as PS( (<|>),(<?>), anyChar, char, choice, digit, letter, many, many1, manyTill, spaces, noneOf, oneOf, parse, sepBy, string, try, GenParser (..),ParseError(..))
 
www = try $ string "www"
Компилятор ругается на это так как у меня вместо String используется ByteString.
То есть я не умею разбирать части, которых может не быть в исходной строке, если используется ByteString.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2017, 17:18
Ответы с готовыми решениями:

Парсинг через Parsec
Собственно только начал изучать язык, и наткнулся на красивейший уже реализованный парсинг. Но он...

Разбор кода определения ip адреса
Ребята, знаю, что темы про определение ip адреса создавались много раз, но нигде не нашел толкового...

Как с библиотекой xNet или без нее получить URL адрес страницы?
Сделал авторизацию вконтакте, хочу искусственно получить токен через приложение, суть в том, что...

Регулярные выражения. Разбор URL
Пытаюсь разобрать URL и получить значения переменных:...

URL адреса
Есть такой url адрес: twitter.com/login и как я понял /login это определенная страница, но если...

10
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
14.06.2017, 20:38 2
Лучший ответ Сообщение было отмечено XRuZzz как решение

Решение

У меня компилируется
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import qualified Data.ByteString as B
import Data.String
import Text.Parsec
import Text.Parsec.ByteString
 
type ParserFunType = Parser String 
 
wwwParing :: ParserFunType
wwwParing = 
    skipMany (noneOf ":") >> string "://" >> (try (string "www") <|> return "www not found")
 
main :: IO ()
main = print $ parse wwwParing "" 
        (fromString "http://www.cyberforum.ru/haskell/thread2003601.html" :: B.ByteString)
2
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
14.06.2017, 22:16  [ТС] 3
Да, если импортировать try из Text.Parsec, то всё хорошо, а если из Text.ParserCombinators.Parsec, то компилятор пишет

Haskell
1
2
3
4
5
6
7
        • Couldn't match type[Char]’ with ‘BS.ByteString’
          Expected type: Text.Parsec.Prim.ParsecT
                           BS.ByteString () Data.Functor.Identity.Identity String
            Actual type: Text.Parsec.Prim.ParsecT
                           [Char] () Data.Functor.Identity.Identity String
        • In a stmt of a 'do' block:
            (try (string "www") <|> return "www not found")
Видимо, куда то не туда меня занесло... На самом деле ByteString мне нафиг не нужен....
1
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
14.06.2017, 23:12 4
Цитата Сообщение от XRuZzz Посмотреть сообщение
если импортировать try из Text.Parsec, то всё хорошо, а если из Text.ParserCombinators.Parsec, то компилятор пишет
Так в Text.ParserCombinators.Parsec.Prim
Haskell
1
2
3
type GenParser tok st = Parsec [tok] st
 
try :: GenParser tok st a -> GenParser tok st a
Нельзя вместо списка ByteString подсунуть.
Цитата Сообщение от XRuZzz Посмотреть сообщение
На самом деле ByteString мне нафиг не нужен
От задачи зависит. Кстати, во что вы парсите?
1
14.06.2017, 23:12
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
14.06.2017, 23:54  [ТС] 5
Я залил обновления:
AXT Хранитель ссылок
файлы: src/Types.hs и src/URL/Parse.hs
1
Curry
15.06.2017, 08:13
  #6

Не по теме:

XRuZzz, строка "www" не является чем то обязательным ( https://translate.google.ru/?hl=ru ) , какой смысл её отдельно выделять в парсинге?

0
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
15.06.2017, 09:37  [ТС] 7
Есть подозрение, что некоторые сайты чувствительны к наличию www.

Добавлено через 8 минут
Но конечно можно было так не загоняться, хранить только полное доменное имя вместе с www в одном String.
0
Curry
15.06.2017, 09:40
  #8

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
Есть подозрение, что некоторые сайты чувствительны к наличию www.
ну, чувствительны, и что? Сохраняйте ссылки как есть. Впрочем, я не знаю какова у вас конечная цель.

0
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
15.06.2017, 16:21  [ТС] 9
Так исторически сложилось

Пока не вижу смысла упрощать структуру URL, так как структура БД уже устаканилась, но твоё мнение важно для меня.
0
pycture
15.06.2017, 17:21
  #10

Не по теме:

не стоит оно того. регулярок на разбор должно хватить. лишний код - лишний саппорт.

0
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
15.06.2017, 20:08  [ТС] 11

Не по теме:

Сначала был рабочий код на PHP - yii 1.
Потом на регулярках и haskell, не понравилось, сделал на parsec.



Добавлено через 7 минут

Не по теме:

Думаю, как бы сделать универсальный интерфейс у такого консольного приложения, чтобы можно было подключать потом GUI, которое, например, KolodeznyDiver пишет, или свои велосипеды...
Стоит ли заводить отдельную тему для этого?

1
15.06.2017, 20:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2017, 20:08

Разбор URL сайта для прохождения по его разделам
Здравствуйте! Я хочу понять как работают большинство сайтов. Что именно я хочу понять , попытаюсь...

Преобразование URL-адреса
Здраствуйте уважаемые. давно интересовало как делать такиж адреса http://sait.com/news/ . Потом...

Проверка URL адреса на существование
Доброго времени суток! Есть определенный цикл по перебору страниц сайта, цикл определяет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.