Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
38 страниц V  « < 28 29 30 31 32 > »   
Ответить в данную темуНачать новую тему
> Учим языки программирования, Помогаем друг-другу, делимся опытом.
_призрак_
сообщение 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>

Как я понял все это происходит из-за символа '<' в строке. Но как исправить паттерн я не знаю. Прошу помогите
Перейти в начало страницы
 
Son1c
сообщение 08.03.2013, 20:46
Сообщение #582


Продвинутый геймер
********

Репутация:   74  
Группа: Забанен
Сообщений: 359
Награды: 2
Регистрация: 24.08.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(_призрак_ @ 08.03.2013, 19:05) *
Как я понял все это происходит из-за символа '<' в строке.

Скорее из-за экранирования кавычек
Цитата
<div class=\"text\">xxx: ну да будет<.yyy:тогда.xxx:началка ЖЭКа?вариант, чо</div>

Попробуй вот такой паттерн
QRegExp rx("<div class=.?\"text.?\">([]*)</div>");

Сообщение отредактировал Son1c - 08.03.2013, 20:59
Перейти в начало страницы
 
autistic
сообщение 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;">[:|||naughty.gif</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;">[:|||naughty.gif</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
Перейти в начало страницы
 
SaneX
сообщение 08.03.2013, 22:52
Сообщение #585


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


По какому принципу на форумах реализована панелька "N чел. читают эту тему (и далее перечисление)"?

Есть подозрение что надо делать ещё одну таблицу, при заходе на страницу берем текущее время, и записываем в таблицу с ID пользователя, ID темы форума, временем. А в запросе выводим все неповторяющиеся имена пользователей у которых текущее время - время их посещение <= 5 минут, к примеру. Но тогда, если форум большой, за пару дней такая таблица будет иметь огромное кол-во записей.

Хотя, если при повторном заходе на страницу всего лишь обновлять запись в таблице, то, по идее, макс. кол-во записей в таблице будет равняться: count(пользователей)*count(тем)



Сообщение отредактировал SaneX - 08.03.2013, 23:04


--------------------
Перейти в начало страницы
 
Son1c
сообщение 08.03.2013, 23:44
Сообщение #586


Продвинутый геймер
********

Репутация:   74  
Группа: Забанен
Сообщений: 359
Награды: 2
Регистрация: 24.08.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(_призрак_ @ 08.03.2013, 21:38) *
И ее он разбивает не правильно, а именно я получаю "xxx: Весне тот не рад, у кого дедлайн 1 марта.</div></div><div class="quote"> .............. <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол..."

http://qt-project.org/doc/qt-4.8/qregexp.html#setMinimal
Перейти в начало страницы
 
autistic
сообщение 09.03.2013, 14:52
Сообщение #587


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Son1c @ 09.03.2013, 00:44) *
Цитата(_призрак_ @ 08.03.2013, 21:38) *
И ее он разбивает не правильно, а именно я получаю "xxx: Весне тот не рад, у кого дедлайн 1 марта.</div></div><div class="quote"> .............. <div class="text">xxx: Существует какая-то сила, не позволяющая линуксоидам засирать рабочий стол..."

http://qt-project.org/doc/qt-4.8/qregexp.html#setMinimal

действительно, надо передать этому методу 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
Перейти в начало страницы
 
nuan
сообщение 12.03.2013, 09:39
Сообщение #588


Игровое Воплощение
*********************

Репутация:   384  
Группа: Участник
Сообщений: 4718
Награды: 9
Регистрация: 21.05.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Вот в упор не могу понять , зачем на c# делегаты, не проще вызвать просто метод?
Во всех книгах, какие то идеализированные примеры, которые к реальности не имеют отношения и понять, зачем и почему нереально.
Перейти в начало страницы
 
Tron
сообщение 12.03.2013, 17:29
Сообщение #589


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(nuan @ 12.03.2013, 10:39) *
Вот в упор не могу понять , зачем на c# делегаты, не проще вызвать просто метод?
Во всех книгах, какие то идеализированные примеры, которые к реальности не имеют отношения и понять, зачем и почему нереально.

Ну я не знаю,как это на C# будет выглядеть,но на С++ яркий тому пример

class Foo(){
public:
void method();
}

void Test(void* pfunc);

Вызов Test(&Foo::Method) не прокатит,а с делегатом(беру в пример из mygui/fastdelegate)
test(new Delegate(Foo::Method)); заработает.
(тут могу ошибиться-если method является статичной,то заработает и без делегата)
Перейти в начало страницы
 
nuan
сообщение 12.03.2013, 17:30
Сообщение #590


Игровое Воплощение
*********************

Репутация:   384  
Группа: Участник
Сообщений: 4718
Награды: 9
Регистрация: 21.05.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Да тут вопрос зачем ? Почему нельзя просто вызвать нужную ф-цию
Перейти в начало страницы
 
autistic
сообщение 12.03.2013, 17:42
Сообщение #591


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


nuan, делегаты дают возможность выполнять код твоей программы/модуля извне, либо наоборот. самый распространенный пример - это оконная ф-ия windows, операционная система ничего не знает ни о твоем приложении, ни о функциях, находящихся внутри, но если должным образом определить ф-ию и передать указатель операционной системе, то ос будет выполнять код этой ф-ии при возникновении соответствующих событий.


--------------------
nop
Перейти в начало страницы
 
nuan
сообщение 12.03.2013, 18:19
Сообщение #592


Игровое Воплощение
*********************

Репутация:   384  
Группа: Участник
Сообщений: 4718
Награды: 9
Регистрация: 21.05.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Ну если это в рамках моего приложения, почему я не могу сделать нужную мне ф-цию static или public? Я понимаю делегат может выполнить не один, а ряд методов, просто логика...
Во всех учебниках приводят пример:
Есть класс такой -то в нем есть переменная ,
бла бла бла
set
{
если произошло изменение
вызываем событие

}
Почему нельзя так же вызвать тот же метод?
Перейти в начало страницы
 
autistic
сообщение 12.03.2013, 18:46
Сообщение #593


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(nuan @ 12.03.2013, 19:19) *
Почему нельзя так же вызвать тот же метод?

потому что не всегда известно заранее какой конкретно метод нужно вызвать, допустим, пишешь ты класс кнопки, но не знаешь заранее какие конкретно действия будут выполняться экземплярами этого класса при щелчке мышью по их визуальному преставлению, т.к. класс один, а кнопок можно понаделать много и у каждой свое действие.


--------------------
nop
Перейти в начало страницы
 
nuan
сообщение 12.03.2013, 18:50
Сообщение #594


Игровое Воплощение
*********************

Репутация:   384  
Группа: Участник
Сообщений: 4718
Награды: 9
Регистрация: 21.05.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


refuse там смысл оказался в том, чтобы подписаться на событие, а делегат как бы посредник с заранее известной сигнатурой, поэтому из другого объекта или класса или еще чего можно получать посылки из этого и выполнять действия...
Вот почему нельзя было подобное описать простым языком.
Еще раз убеждаюсь, что некоторые пишут книги как бы для тех , кто уже понимает этот материал.
P.S. Изучавшие матан -поймут.
Перейти в начало страницы
 
Shoкer
сообщение 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


Что меня несказанно радовало. smile.gif

Однако в C# почему то отказались от них sad.gif, в связи с тем вопрос - может кто нибудь знает способ вернуть макросы или как можно расширить синтаксис C# своими собственными операторами? М.б есть специальные расширения или переделанные компиляторы?

Я знаю про snippets (фрагменты когда) но это решение меня не очень устраивает - я хочу максимально упростить синтаксис. (мне хватило команды вывода текста в консоль, которая длиннее пяти букв biggrin.gif)

_______________

Ещё они порезали заголовочные файлы, и я не разобрался каким образом можно объявить в другом файле функцию без добавления её в класс sad.gif (если добавить в класс, то при вызове надо писать имя_класса.функция что опять таки не удобно)

Сообщение отредактировал Shoкer - 18.03.2013, 02:42


--------------------
Мне просто нравятся синие буквы под сообщением.
Перейти в начало страницы
 
autistic
сообщение 18.03.2013, 09:09
Сообщение #596


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Shoкer, использования макросов надо избегать по-возможности и в с++, т.к. они образуют неязыковые конструкции. препроцессор является наследием языка си, в котором не было в достаточной мере средств языка, позволяющих обойтись без макросов.

Сообщение отредактировал refuse - 18.03.2013, 09:22


--------------------
nop
Перейти в начало страницы
 
nuan
сообщение 22.03.2013, 08:38
Сообщение #597


Игровое Воплощение
*********************

Репутация:   384  
Группа: Участник
Сообщений: 4718
Награды: 9
Регистрация: 21.05.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Вот такой вопрос, опять же на c# есть xml-ка
<блаблабла x="1" x="2" x="3" ... x="n" блаблабла\>
когда начинаю читать атрибуты пишет что они мол повторяются и вылетает с ошибкой.
Как их прочитать?
Перейти в начало страницы
 
jamakasi
сообщение 22.03.2013, 09:08
Сообщение #598


Доктор Игровых Наук
*******************

Репутация:   544  
Группа: Участник
Сообщений: 3657
Награды: 9
Регистрация: 12.07.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
... x="1" x="2" x="3" ... x="n"...

Намекаю z_crazy.gif
Перейти в начало страницы
 
nuan
сообщение 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
Перейти в начало страницы
 
jamakasi
сообщение 22.03.2013, 09:29
Сообщение #600


Доктор Игровых Наук
*******************

Репутация:   544  
Группа: Участник
Сообщений: 3657
Награды: 9
Регистрация: 12.07.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


тогда наверное надо писать как x1 ="1" x2="2" smile.gif
Перейти в начало страницы
 

38 страниц V  « < 28 29 30 31 32 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 12.05.2024, 21:38