Я тебя разочарую, по факту оно идет через последовательный подбор, просто вот эти автоматы строятся регуляркой, а не программистом... выигрыша в скорости они не дают...
Как работают эти автоматы: перебираем символы пока не найдется такой который переведет автомат во 2е состояние, потом в 3е и тд. т.е. тупо проход по строке... так же как и у строк
PS: под "подбором" я имел ввиду что мы проходим по строке и сравниваем символы...
Но перебор идёт не всех символов, в отличии от IndexOf
И думаешь программист построит код лучше и эффективней чем машина?
Возвращаясь к теме, на практике парсить html страничку лучше регуляркой, и это будет быстрее, я с этим сталкивался и задавался этим вопросом.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Но перебор идёт не всех символов, в отличии от IndexOf
И думаешь программист построит код лучше и эффективней чем машина?
Возвращаясь к теме, на практике парсить html страничку лучше регуляркой, и это будет быстрее, я с этим сталкивался и задавался этим вопросом.
Вообще то всех...
Да, поскольку он задает точные, команды(которые будет после еще оптимизированны компилятором), а регулярка будет еще строить этот автомат, держать в памяти все состояния и переходы...
"Перебор" пожалуйста, если вам не трудно, а то передергивает..
Цитата:
Сообщение от Sinyss
который надо еще распарсить
Никто не запрещает заранее скомпилировать регулярку (RegexOptions.Compiled)
Цитата:
Сообщение от Puzer
никак не последовательный подбор символов
1. "Перебор", будьте так любезны
2. Ай?! Чаво? Ну-ка просветите, они должно быть молятся, в ожидании маны небесной?
Во избежание холиваров и вытекающих из них баттхёртов , перед публикацией последующих постов прошу всех желающих ознакомиться:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Далее:
1. IndexOf возвращает первое вхождение подстроки, либо -1 в случае отсутствия оной. Еще раз - если искомая подстрока имеет место, то функция по всей строке не проходит. мелкомягкие все-таки тоже не мyдаки..
2. Регекспы в случае с dfa машинами проходят всю строку, поскольку ищет самое длинное соответствие. При nfa алгоритме все еще сложнее - из-за возвратов. Ищет первое вхождение подстроки. posix nfa - тоже самое, ищет самое длинное вхождение. .Netовская реализация представляет собой лучшие (по заверениям мелкософта) функции nfa машины + полезная "отсебятина".
=> реги в принципе не могут быть быстрее цикла сверяющего конкретное с конкретным.
3. Регулярки это удобно, и не надо извращаться, вы не заметите разницы во скорости между работой реги и вашего, написанного, очевидно, среди ночи, (о вас не знаю и судить не могу, но в подавляющем большинстве случаев 6ыдло-) кода.
4. Использование регулярных выражений уберегает вас от множества ошибок, и болезненных ощущений в нижней части позвоночника - при написании велосипедов случайно поставленный злобным юзером пробел подле какой-нибудь скобки ой-ей-ей как подпортит вам кровушку, когда вы будете ломать голову - от чего ж этот ваш "сверхскоростной" парсер игнорирует сию строку, а заметить тот самый пробел пол-пятого ночи ваш мозг не пожелает, более чем уверен.
5. Если есть готовый класс для работы с имеющими свою четкую структуру - используйте его, не стесняйтесь, это вовсе не грех, а от задержки в миллион-другой колебаний процессора этот нахальный пользователь не умрет.. А вот вы сможете поспать на пару часов дольше.
Добавлено через 6 минут
Цитата:
Сообщение от Sinyss
держать в памяти все состояния и переходы
Сколько у вас ram?)
А на буржуйских машинках ставят по 8, по 16 GiB.. XXI век как-никак, на серверах овер 128GiB озу, вы несколько килобайтов жалеете?
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось •theSaboteur•; 02.02.2012 в 22:44.
Причина: Добавлено сообщение
Из килобайт вырастают мегабайты, для 1 сайта делал парсер - практический пример страница там в районе 600кб - не мало, верно? Простыми IndexOf-ами, Split-ами и тп. парсится все в доли секунд с выделением памяти в 6-8 метров на 10 таких страничек, но забыл "убивать" отработанное и составили потери в 4-8 метров, но как же я был убит, когда я начитавшись про регексы, какая эта крутая вещь и тд и тп решил потестить, извините, для нетбука 80-120 метров со страниц в 600 кб - это уже перебор, в конечном итоге после оптимизации на все 10 страниц вылетало по сравнению с 4-8 метрами 60-90 метров....Да, для супер-пупер машин это раз плюнуть, но для нетбуков это дофига и быдлятский код именно с регексами ИМХО просто так налево и направо раскидываться памятью - признак не ок кодера!
Hermeska, для слабых машин, высоких скоростей и точных вычислений существует си и ассемблер, а дотнет предназначен для упрощения жизни кодера.
Да и регекс составить по-разному можно))
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Sinyss, Браво!!! Прозвучало очень так.. Очень!
Однако, очевидно - что-то у меня с головой не так,
но в моем представлении эти слова никоим образом нельзя интерпретировать как "C# для гoвнокода".
Прочтите еще раз мой пост, уважаемый, и вы увидите что я лишь высказал мнение,
что .Net значительно облегчает тяжкое бремя программиста,
а от исполняемого виртуальной машиной программного кода нельзя требовать сверхпроизводительности.
Если вдруг, не дай Господи, Вы вновь увидите что-либо связанное с гoвнокодом - могу посоветовать словарь Даля.
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Просто кодеру удобней городить *****код, чем писать нормально...
Простой пример:
Лабораторная, суть которой заключается в подсветке всех элементов языка(например паскаль), надо выделять отдельными цветами цифры, строки, коментарии, операции, переменные, зарезервированные слова и тд.
Мой код на входных данных в 1к строчек работал ~секунду(округлено вверх), код одногрупника, построенный на регулярках, на 15 строчках - больше 30 секунд...
Да, его код был более чем понятен, короткий, лаконичный, но это не компенсировало потерь в быстродействии. Он сделал так не потому что не умел по другому, а просто потому что так было УДОБНЕЕ.
Код удобный программисту(в 99% случаев) = говн-код.
Обработка входных текстовых данных через Split, множество регулярок и другие тяжелые структуры возможна, она удобна для программиста, но подайте на вход тяжелый файл и вы заметите что то не так...
...Мой код на входных данных в 1к строчек работал ~секунду(округлено вверх), код одногрупника, построенный на регулярках, на 15 строчках - больше 30 секунд...
.
Ну раз перешли на *****кодеров...ты вы им являетесь, как впрочем и ваш друг. Почему? Вы потому что код в 1к строк, основаный не на рациональном варианте. Вы же ещё будете в группе разработчиков работать, вы представляете какого им будет читать ваш код ? Ваш однокурсник выбрал более рациональный алгоритм решения данной задачи, но видно намудрил с объявлениями\регулярками\циклами, в общем не провёл оптимизацию алгоритма.
Лично у меня программы для исправления базы данных, основанная на регулярках, работает со скоростью примерно секунды 1-2 на 300-400 мб файла, при том она полностью изменяет структуру документа. При том через эту программу проходили документы размером в 9 гб (читал БД по кускам правда)
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Sinyss, боюсь представить что написал ваш многоуважаемый одногрупник, в частности количество возвратов...
Ранее я уже упоминал - регулярное выражение, равно как и программный код, можно написать по-разному.
Возможно вы поторопились-таки с выводами - это вовсе не плохая технология, пост выше (#54) подтверждение тому.
Кто-то кстати упоминал Фриддла - глянул когда-то пару первых страниц...
Вступление к сожалению отбило у меня желание читать сие произведение - больно много было воды про "мыслить регулярными выражениями" и тому подобного, однако встречал мнение, что книжонка достойная.
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Ну раз перешли на *****кодеров...ты вы им являетесь, как впрочем и ваш друг. Почему? Вы потому что код в 1к строк, основаный не на рациональном варианте. Вы же ещё будете в группе разработчиков работать, вы представляете какого им будет читать ваш код ? Ваш однокурсник выбрал более рациональный алгоритм решения данной задачи, но видно намудрил с объявлениями\регулярками\циклами, в общем не провёл оптимизацию алгоритма.
Лично у меня программы для исправления базы данных, основанная на регулярках, работает со скоростью примерно секунды 1-2 на 300-400 мб файла, при том она полностью изменяет структуру документа. При том через эту программу проходили документы размером в 9 гб (читал БД по кускам правда)
Перечитайте мой пост.
Мой алгоритм(без кода GUI и тд.) занимал 40-70 строк(сейчас уже не помню), на вход я подавал 1к строк...
•theSaboteur•, я не говорил что технология плохая, я говорю что злоупотреблять не стоит...
это интересно во сколько потоков считывался файл???? или это просто так написать, похвастаться, насколько мы круты!....
Лололо-трололо все только на словах, на практике - удобно вам там с регулярками - идите пишите на них, не надо тут убеждать никого что это круто, модно, быстро и тп чушь нести, вы сначала посмотрите что регулярка делает, в рефлекторе прогоните(для особо долгих)....
Я напишу 2-3 парсера и будет все пахать и летать по чем свет стоит, а ну да чуть не забыл - типо говорили измени в документе что-нибудь и ваш УГ не будет работать, не заьывайте что и в регулярках все задается точно(для долгих - маска регулярки), так что решать каждому самому что выбирать, но аргументы к регуляркам,ИМХО только потому что там думать и париться особо не надо, в отличии от написания своих собственных парсеров, так сказать ЛЕНЬ.
ps: какой-то умник писал что регулярки надо юзать, а не работать со строковыми индексофами сабстрингами и тп... Для него(сам поймет кто) скажу еще раз - посмотри структуру регексов - сколько сот раз они используют Индексофы Сплиты и тд и тп
pps: закройте уже эту тему!
Последний раз редактировалось Hermein; 04.02.2012 в 04:39.
типо говорили измени в документе что-нибудь и ваш УГ не будет работать
Где написано такое?))))
Читайте товарищ.
Цитата:
Сообщение от Hermein
все задается точно(для долгих - маска регулярки),
В регексе достаточно впихнуть всего пару символов, в ситуациях где велосипедописатели пихают по несколько циклов.
И вновь говорю - когда вы будете сидеть в половину пятого ночи, вы напишите такой код, увидев который утром умрете в ужасе.
Конкретно о том злополучном пробеле - написать @"\s*" куда проще чем писать две лишних строчки -_-
Реги позволяют быстро и компактно написать код парса данных и в большинстве случаев они работают с удовлетворительной скоростью.
Цитата:
Сообщение от Hermein
какой-то умник писал что регулярки надо юзать
Еще раз повторяю - читайте посты, а не фантазируйте, умник.
Цитата:
Сообщение от Hermein
посмотри структуру регексов
Хоть мельком видели .net'овскую реализацию регулярок?
Может еще и мелкософт начал сорсы в паблик выкладывать?)
После взгляда на ваш пост возникает сомнение по поводу того, что вы сидели с рефлектором
Цитата:
Сообщение от Hermein
Я напишу 2-3 парсера и будет все пахать и летать по чем свет стоит
Вот я встречал несколько раз эдаких вот самописцев - разрыдаться можно при виде ихних "велосипедов"...
Цитата:
Сообщение от Hermein
сколько сот раз они используют Индексофы
А вы стало быть не используете?
И "дяди" писавшие .нэт не дураки - нужные данные, более чем уверен, хранятся в памяти.
-------------
Все делать самому это конечно хорошо, и к сожалению я этим сильно болею, но надо различать ситуации - порой можно и нужно использовать готовую продукцию, ибо время - это время, его часто не хватает.
Резюме:
Я бы сейчас умер со-смеху, не будь все это так печально.
Очевидно вам, умный человек, не слишком часто приходилось писать код в сжатые сроки...
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось •theSaboteur•; 04.02.2012 в 16:47.