Учим языки программирования, Помогаем друг-другу, делимся опытом. |
Здравствуйте, гость ( Авторизация | Регистрация )
Учим языки программирования, Помогаем друг-другу, делимся опытом. |
08.03.2013, 20:05
Сообщение
#581
|
|
Опытный Геймер Репутация: 45 Группа: Участник Сообщений: 152 Награды: 3 Регистрация: 14.02.2011 |
Тут появилась у меня проблема у меня недавно. Весь гугл прошарил, ничего не нашел, надеюсь здесь есть умные люди. Есть следующий код:
Код QRegExp rx("<div class=\"text\">([]*)</div>"); //rx.setCaseSensitive(false); int pos = 0; while ((pos = rx.indexIn(data, pos)) != -1) { QString s(rx.cap(1)); qDebug()<<s; pos += rx.matchedLength(); } По идее работать он должен так: из содержимого строки data он выводить весь текст, находящийся между подстроками <div class="text"> и подстрокой </div> Но в процессе тестирования появилась проблема. Вот такую строку он парсит: <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол...</div> А вот в этой строке он ничего не находит и как следовательно ничего не выводит: <div class=\"text\">xxx: ну да будет<.yyy:тогда.xxx:началка ЖЭКа?вариант, чо</div> Как я понял все это происходит из-за символа '<' в строке. Но как исправить паттерн я не знаю. Прошу помогите |
 
|
|
|
|
08.03.2013, 20:46
Сообщение
#582
|
|
Продвинутый геймер Репутация: 74 Группа: Забанен Сообщений: 359 Награды: 2 Регистрация: 24.08.2007 |
Как я понял все это происходит из-за символа '<' в строке. Скорее из-за экранирования кавычек Цитата <div class=\"text\">xxx: ну да будет<.yyy:тогда.xxx:началка ЖЭКа?вариант, чо</div> Попробуй вот такой паттерн QRegExp rx("<div class=.?\"text.?\">([]*)</div>"); Сообщение отредактировал Son1c - 08.03.2013, 20:59 |
 
|
|
08.03.2013, 22:18
Сообщение
#583
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Код #include <qapplication> #include <qregexp.h> #include <qdebug.h> #include <iostream> int main(void) { setlocale(LC_ALL, ".1251"); QString data = "<div class=\"text\">xxx: ну да будет<.yyy:тогда.xxx:началка ЖЭКа?вариант, чо</div>"; // QRegExp rx("<div class=\"text\">([]*)</div>"); QRegExp rx("(<div class=\"text\">)(.*)(</div>)"); //rx.setCaseSensitive(false); int pos = 0; while ((pos = rx.indexIn(data, pos)) != -1) { QString s = rx.cap(2); std::cout << s.toAscii().constData() << std::endl; pos += rx.matchedLength(); } getchar(); return 0; } з.ы. ты заставил меня -------------------- nop
|
 
|
|
08.03.2013, 22:38
Сообщение
#584
|
|
Опытный Геймер Репутация: 45 Группа: Участник Сообщений: 152 Награды: 3 Регистрация: 14.02.2011 |
Спасибо, все получилось! Давно уже нужно научиться пользоваться регулярными выражениями, но никак руки не доходят их выучить
АП: Ан, нет, погорячился. Есть такая строка: Цитата <div class="quote"> <div class="actions"> <a href="http://bash.im/quote/421508/rulez" class="up" rel="nofollow" onclick="v('421508',0,0); return false;">+</a> <span class="rating-o"><span id="v421508" class="rating">752</span></span> <a href="http://bash.im/quote/421508/sux" class="down" rel="nofollow" onclick="v('421508',1,0); return false;">–</a> <a href="http://bash.im/quote/421508/bayan" class="old" id="vb421508" rel="nofollow" onclick="v('421508',2,0); return false;">[:|||</a> <span class="share" id="s421508"><span class="b-share"><a class="b-share__handle" id="ya-share-0.12897558324038982-1362596249525" data-hdirection="" data-vdirection=""><span class="b-share__text">Поделиться</span></a></span></span> <span class="date">2013-03-05 12:12</span> <a href="http://bash.im/quote/421508" class="id">#421508</a> </div> <div class="text">xxx: Весне тот не рад, у кого дедлайн 1 марта.</div> </div> <div class="quote"> <div class="actions"> <a href="http://bash.im/quote/421507/rulez" class="up" rel="nofollow" onclick="v('421507',0,0); return false;">+</a> <span class="rating-o"><span id="v421507" class="rating">2185</span></span> <a href="http://bash.im/quote/421507/sux" class="down" rel="nofollow" onclick="v('421507',1,0); return false;">–</a> <a href="http://bash.im/quote/421507/bayan" class="old" id="vb421507" rel="nofollow" onclick="v('421507',2,0); return false;">[:|||</a> <span class="share" id="s421507"><span class="b-share"><a class="b-share__handle" id="ya-share-0.8315991654526442-1362596249526" data-hdirection="" data-vdirection=""><span class="b-share__text">Поделиться</span></a></span></span> <span class="date">2013-03-05 12:11</span> <a href="http://bash.im/quote/421507" class="id">#421507</a> </div> <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол...</div> </div> И ее он разбивает не правильно, а именно я получаю "xxx: Весне тот не рад, у кого дедлайн 1 марта.</div></div><div class="quote"> .............. <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол..." Сообщение отредактировал _призрак_ - 08.03.2013, 22:54 |
 
|
|
08.03.2013, 22:52
Сообщение
#585
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
По какому принципу на форумах реализована панелька "N чел. читают эту тему (и далее перечисление)"?
Есть подозрение что надо делать ещё одну таблицу, при заходе на страницу берем текущее время, и записываем в таблицу с ID пользователя, ID темы форума, временем. А в запросе выводим все неповторяющиеся имена пользователей у которых текущее время - время их посещение <= 5 минут, к примеру. Но тогда, если форум большой, за пару дней такая таблица будет иметь огромное кол-во записей. Хотя, если при повторном заходе на страницу всего лишь обновлять запись в таблице, то, по идее, макс. кол-во записей в таблице будет равняться: count(пользователей)*count(тем) Сообщение отредактировал SaneX - 08.03.2013, 23:04 -------------------- |
 
|
|
08.03.2013, 23:44
Сообщение
#586
|
|
Продвинутый геймер Репутация: 74 Группа: Забанен Сообщений: 359 Награды: 2 Регистрация: 24.08.2007 |
И ее он разбивает не правильно, а именно я получаю "xxx: Весне тот не рад, у кого дедлайн 1 марта.</div></div><div class="quote"> .............. <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол..." |
 
|
|
09.03.2013, 14:52
Сообщение
#587
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
И ее он разбивает не правильно, а именно я получаю "xxx: Весне тот не рад, у кого дедлайн 1 марта.</div></div><div class="quote"> .............. <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол..." действительно, надо передать этому методу true в качестве параметра, тогда будет использована ленивая квантификация. Код #include <qapplication> #include <qregexp.h> #include <qdebug.h> #include <iostream> int main(void) { setlocale(LC_ALL, ".1251"); QString data = "<div class=\"quote\">" "<div class=\"actions\">" "<a href=\"http://bash.im/quote/421508/rulez\"class=\"up\"rel=\"nofollow\"onclick=\"v('421508',0,0); return false;\">+</a>" "<span class=\"rating-o\"><span id=\"v421508\" class=\"rating\">752</span></span>" "<a href=\"http://bash.im/quote/421508/sux\" class=\"down\" rel=\"nofollow\" onclick=\"v('421508',1,0); return false;\">–</a>" "<a href=\"http://bash.im/quote/421508/bayan\" class=\"old\" id=\"vb421508\" rel=\"nofollow\" onclick=\"v('421508',2,0); return false;\">[:|||</a>" "<span class=\"share\" id=\"s421508\"><span class=\"b-share\"><a class=\"b-share__handle\" id=\"ya-share-0.12897558324038982-1362596249525\" data-hdirection=\"\" data-vdirection=\"\">" "<span class=\"b-share__text\">Поделиться</span></a></span></span>" "<span class=\"date\">2013-03-05 12:12</span> <a href=\"http://bash.im/quote/421508\" class=\"id\">#421508</a> </div>" "<div class=\"text\">xxx: Весне тот не рад, у кого дедлайн 1 марта.</div>\"</div>" "<div class=\"quote\">" "<div class=\"actions\">" "<a href=\"http://bash.im/quote/421507/rulez\" class=\"up\" rel=\"nofollow\" onclick=\"v('421507',0,0); return false;\">+</a>" "<span class=\"rating-o\"><span id=\"v421507\" class=\"rating\">2185</span></span> <a href=\"http://bash.im/quote/421507/sux\" class=\"down\" rel=\"nofollow\" onclick=\"v('421507',1,0); return false;\">–</a>" "<a href=\"http://bash.im/quote/421507/bayan\" class=\"old\" id=\"vb421507\" rel=\"nofollow\" onclick=\"v('421507',2,0); return false;\">[:|||</a> <span class=\"share\" id=\"s421507\"><span class=\"b-share\">" "<a class=\"b-share__handle\" id=\"ya-share-0.8315991654526442-1362596249526\" data-hdirection=\"\" data-vdirection=\"\"><span class=\"b-share__text\">Поделиться</span></a></span></span> <span class=\"date\">2013-03-05 12:11</span> <a href=\"http://bash.im/quote/421507\" class=\"id\">#421507</a> </div>" "<div class=\"text\">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол...</div>" "</div>"; // QRegExp rx("<div class=\"text\">([]*)</div>"); QRegExp rx("<div class=\"text\">(.*)</div>"); rx.setMinimal(true); //rx.setCaseSensitive(false); int pos = 0; while ((pos = rx.indexIn(data, pos)) != -1) { QString s = rx.cap(1); std::cout << s.toAscii().constData() << std::endl; pos += rx.matchedLength(); } getchar(); return 0; } SaneX, тебе, очевидно, в соседнюю тему Сообщение отредактировал refuse - 09.03.2013, 14:56 -------------------- nop
|
 
|
|
12.03.2013, 09:39
Сообщение
#588
|
|
Игровое Воплощение Репутация: 384 Группа: Участник Сообщений: 4718 Награды: 9 Регистрация: 21.05.2008 |
Вот в упор не могу понять , зачем на c# делегаты, не проще вызвать просто метод?
Во всех книгах, какие то идеализированные примеры, которые к реальности не имеют отношения и понять, зачем и почему нереально. |
 
|
|
12.03.2013, 17:29
Сообщение
#589
|
|
Игровой Эксперт Репутация: 407 Группа: Участник Сообщений: 2394 Награды: 5 Регистрация: 19.01.2009 |
Вот в упор не могу понять , зачем на c# делегаты, не проще вызвать просто метод? Во всех книгах, какие то идеализированные примеры, которые к реальности не имеют отношения и понять, зачем и почему нереально. Ну я не знаю,как это на C# будет выглядеть,но на С++ яркий тому пример class Foo(){ public: void method(); } void Test(void* pfunc); Вызов Test(&Foo::Method) не прокатит,а с делегатом(беру в пример из mygui/fastdelegate) test(new Delegate(Foo::Method)); заработает. (тут могу ошибиться-если method является статичной,то заработает и без делегата) |
 
|
|
12.03.2013, 17:30
Сообщение
#590
|
|
Игровое Воплощение Репутация: 384 Группа: Участник Сообщений: 4718 Награды: 9 Регистрация: 21.05.2008 |
Да тут вопрос зачем ? Почему нельзя просто вызвать нужную ф-цию
|
 
|
|
12.03.2013, 17:42
Сообщение
#591
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
nuan, делегаты дают возможность выполнять код твоей программы/модуля извне, либо наоборот. самый распространенный пример - это оконная ф-ия windows, операционная система ничего не знает ни о твоем приложении, ни о функциях, находящихся внутри, но если должным образом определить ф-ию и передать указатель операционной системе, то ос будет выполнять код этой ф-ии при возникновении соответствующих событий.
-------------------- nop
|
 
|
|
12.03.2013, 18:19
Сообщение
#592
|
|
Игровое Воплощение Репутация: 384 Группа: Участник Сообщений: 4718 Награды: 9 Регистрация: 21.05.2008 |
Ну если это в рамках моего приложения, почему я не могу сделать нужную мне ф-цию static или public? Я понимаю делегат может выполнить не один, а ряд методов, просто логика...
Во всех учебниках приводят пример: Есть класс такой -то в нем есть переменная , бла бла бла set { если произошло изменение вызываем событие } Почему нельзя так же вызвать тот же метод? |
 
|
|
12.03.2013, 18:46
Сообщение
#593
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Почему нельзя так же вызвать тот же метод? потому что не всегда известно заранее какой конкретно метод нужно вызвать, допустим, пишешь ты класс кнопки, но не знаешь заранее какие конкретно действия будут выполняться экземплярами этого класса при щелчке мышью по их визуальному преставлению, т.к. класс один, а кнопок можно понаделать много и у каждой свое действие. -------------------- nop
|
 
|
|
12.03.2013, 18:50
Сообщение
#594
|
|
Игровое Воплощение Репутация: 384 Группа: Участник Сообщений: 4718 Награды: 9 Регистрация: 21.05.2008 |
refuse там смысл оказался в том, чтобы подписаться на событие, а делегат как бы посредник с заранее известной сигнатурой, поэтому из другого объекта или класса или еще чего можно получать посылки из этого и выполнять действия...
Вот почему нельзя было подобное описать простым языком. Еще раз убеждаюсь, что некоторые пишут книги как бы для тех , кто уже понимает этот материал. P.S. Изучавшие матан -поймут. |
 
|
|
18.03.2013, 02:34
Сообщение
#595
|
|
Кандидат Игровых Наук Репутация: 2153 Группа: Участник Сообщений: 3488 Награды: 4 Регистрация: 27.07.2009 |
Начав изучать C# после C++ (юзаю Visual Studio 2010) я был "приятно" удивлён тем, что функции препроцессора там максимально порезали.
Т.к в C++ писать if() { } мне было не удобно (особенно после Lua), я делал там себе маленькие макросы вроде: Код #define If if ( #define Then ){ #define Else }else{ #define End } Соответственно в коде на C++ мне достаточно было писать Код If 1 = 1 Then End Что меня несказанно радовало. Однако в C# почему то отказались от них , в связи с тем вопрос - может кто нибудь знает способ вернуть макросы или как можно расширить синтаксис C# своими собственными операторами? М.б есть специальные расширения или переделанные компиляторы? Я знаю про snippets (фрагменты когда) но это решение меня не очень устраивает - я хочу максимально упростить синтаксис. (мне хватило команды вывода текста в консоль, которая длиннее пяти букв ) _______________ Ещё они порезали заголовочные файлы, и я не разобрался каким образом можно объявить в другом файле функцию без добавления её в класс (если добавить в класс, то при вызове надо писать имя_класса.функция что опять таки не удобно) Сообщение отредактировал Shoкer - 18.03.2013, 02:42 -------------------- Мне просто нравятся синие буквы под сообщением.
|
 
|
|
18.03.2013, 09:09
Сообщение
#596
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Shoкer, использования макросов надо избегать по-возможности и в с++, т.к. они образуют неязыковые конструкции. препроцессор является наследием языка си, в котором не было в достаточной мере средств языка, позволяющих обойтись без макросов.
Сообщение отредактировал refuse - 18.03.2013, 09:22 -------------------- nop
|
 
|
|
22.03.2013, 08:38
Сообщение
#597
|
|
Игровое Воплощение Репутация: 384 Группа: Участник Сообщений: 4718 Награды: 9 Регистрация: 21.05.2008 |
Вот такой вопрос, опять же на c# есть xml-ка
<блаблабла x="1" x="2" x="3" ... x="n" блаблабла\> когда начинаю читать атрибуты пишет что они мол повторяются и вылетает с ошибкой. Как их прочитать? |
 
|
|
22.03.2013, 09:08
Сообщение
#598
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
Цитата ... x="1" x="2" x="3" ... x="n"... Намекаю |
 
|
|
22.03.2013, 09:21
Сообщение
#599
|
|
Игровое Воплощение Репутация: 384 Группа: Участник Сообщений: 4718 Награды: 9 Регистрация: 21.05.2008 |
Цитата Цитата ... x="1" x="2" x="3" ... x="n"... Намекаю z_crazy.gif Ну это пример... может последовательность быть 100 50 35 6034 234 5634 231 423 |
 
|
|
22.03.2013, 09:29
Сообщение
#600
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
тогда наверное надо писать как x1 ="1" x2="2"
|
 
|
|
Текстовая версия | Сейчас: 23.05.2024, 17:09 |