Russian Qt Forum
Ноябрь 23, 2024, 11:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6 7   Вниз
  Печать  
Автор Тема: Разбор QString  (Прочитано 62959 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #60 : Июль 04, 2013, 15:27 »

Тоже не правда. Любой программист C++ (внимание не С с классами), а грамотный программист, спокойно пользуется большинством бустовских библиотек.
Так это легко проверить. Вот Вы грамотный программист (ну или считаете себя таковым Улыбающийся), спокойно пользуетесь бустом. И вот допустим возникла необходимость исправить то что сделал m_ax
Цитировать
(abc")de"fg)
В предыущей реализации m_ax на это забил, просто проверял парность скобок, поэтому первый токен будет (abc") что неверно. Думаю и в этой то же самое.

Сколько же Вам времени понадобится чтобы исправить? Подозреваю что "нисколько" - Вы за это просто не возьметесь - но будете продолжать говорить о "грамотности" и.т.п. Или я ошибаюсь и у Вас слова не расходятся с делом?  Улыбающийся

Категорически с этим не согласен. Процесс осваивания и изучения чего то нового, как раз и развивает мышление, заставляет сопостовлять, находить, устанавливать связи и т.д.
В какой-то мере да, но это очень "однобоко", Вы в плену слишком абстрактных, схоластических конструкций. В реальных задачах фокус/центр тяжести часто совсем в др месте, а также неизвестно есть ли решение вообще. Ну вот напр давеча

- есть довольно популярная структура данных OcTree, найти реализацию и воспользоваться не составляет труда (возможно уже упоминал об этом здесь). Но вот беда - всего на 10K данных она сожрала 450 Mb. Может плохая реализация? Берем другую - хмм.. примерно то же самое. В чем дело? Или время поиска почему-то резко упало. У меня более 90% работы примерно такого плана, поэтому и отношусь прохладно у бусту, std - мне от них мало толку
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #61 : Июль 04, 2013, 17:18 »

В предыущей реализации m_ax на это забил, просто проверял парность скобок, поэтому первый токен будет (abc") что неверно. Думаю и в этой то же самое.
Давайте четко сформулируем эти правила, а то "так по вашему верно, а так не верно", что бы вы в дальнейшем не вспоминали про исключения и "это и так должно быть понятным".
Для меня пока не понятно, а как будет правильно и какими символами мы вообще строку делим?
« Последнее редактирование: Июль 04, 2013, 18:02 от Old » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #62 : Июль 04, 2013, 20:08 »

Сколько же Вам времени понадобится чтобы исправить? Подозреваю что "нисколько" - Вы за это просто не возьметесь - но будете продолжать говорить о "грамотности" и.т.п. Или я ошибаюсь и у Вас слова не расходятся с делом?  Улыбающийся
К сожалению m_ax не выложил всех исходников, поэтому исправить его вариант пока не могу.
Но я посмотрел на эту библиотеку и вот, что я набросал за 10 минут:
Код
C++ (Qt)
#include <iostream>
#include <boost/tokenizer.hpp>
 
using namespace boost;
 
template <class CharT>
class simple_char_separator
{
public:
       typedef std::basic_string<CharT> string_type;
       typedef typename string_type::const_iterator const_iterator;
 
       simple_char_separator() : m_open( "(" ), m_close( ")" ) {}
 
       void reset() {}
 
       bool operator()( const_iterator &next, const_iterator end, string_type &tok ) const
       {
               if( next == end )
           return false;
 
               const const_iterator start_pos = std::search( next, end, m_open.begin(), m_open.end() );
               if( start_pos == end )
                       return false;
 
               const const_iterator end_pos = std::search( start_pos, end, m_close.begin(), m_close.end() );
               tok.assign( start_pos, end_pos+1 );
 
               next = ( end_pos == end )? end : end_pos + 1;
 
       return true;
       }
 
private:
       std::string m_open;
       std::string m_close;
};
 
int main()
{
       std::string s = "(10, 20, 30) ( 10, 20, 30 ) (10, 20, 30)";
 
       std::cout << s << std::endl;
 
       tokenizer<simple_char_separator<char> > tok( s, simple_char_separator<char>() );
       for( auto v : tok )
       {
               std::cout << v << std::endl;
       }
 
  return 0;
}
 
Я так понял, что для вас Igors это недостижимый порог вхождения, а вот мнение Вереса, который писал о непонятках, интересно: скажите на сколько для вас это сложно и понимаете ли вы, что здесь делается?
Записан
Bepec
Гость
« Ответ #63 : Июль 04, 2013, 20:30 »

Вот вы написали интересный код.

Я его ни черта не понимаю. Что за токенизер что за симплечарсепаратор что за параметры ему передаются Улыбающийся

Я смогу его использовать только после десятка неудачных применений Показает язык Возможно это из-за моих знаний. (в идеале пара тестовых проектов)

Но как ни странно для меня идеал - это функция std::list<std::string> parse (std::string source, std::string separator). Потому что она ясна и понятна, что и как. И чтобы её использовать нет нужды писать магические слова. И мой коллега по работе поймёт эту функцию Веселый

PS с конструкцией auto я тоже незнаком, но уже нагуглил Веселый

PPS мой идеал - самодокументируемый понятный код. Но обычно получается самодокументируемая функция + парочка комментариев в ней.
« Последнее редактирование: Июль 04, 2013, 20:34 от Bepec » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #64 : Июль 04, 2013, 20:35 »

Я его ни черта не понимаю. Что за токенизер что за симплечарсепаратор что за параметры ему передаются Улыбающийся
Информация по этому есть в посте m_ax.
А логика получения токенов там примитивная.

Но как ни странно для меня идеал - это функция std::list<std::string> parse (std::string source, std::string separator).
Вот ее замена в моем коде:
Код
C++ (Qt)
tokenizer<simple_char_separator<char> > tok( s, simple_char_separator<char>() );
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #65 : Июль 04, 2013, 20:36 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #66 : Июль 04, 2013, 20:40 »

Цитировать
В предыущей реализации m_ax на это забил, просто проверял парность скобок, поэтому первый токен будет (abc") что неверно. Думаю и в этой то же самое.
Я уже писал выше, почему считаю эту необходимость (в приорететах) избыточной.. Возможно корни таких решений растут от кривой архитектуры.
Во-вторых для моих целей приоритеты для цитат не требуются.

В-третьих, если мне всё же такой функционал и понадобится, то я, поверьте, его реализую.) Это не сложно)

Цитировать
К сожалению m_ax не выложил всех исходников, поэтому исправить его вариант пока не могу.

Я выкладывал)

Вот приаттачиваю простенький пример, чтоб можно было поиграться)

 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #67 : Июль 04, 2013, 20:52 »

Вот приаттачиваю простенький пример, чтоб можно было поиграться)
Ок, спасибо.
Но, вроде, мой примитивный набросок хорошо показывает необходимый порог вхождения. Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #68 : Июль 04, 2013, 21:02 »

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


Согласен)

to Верес:
Цитировать
Но как ни странно для меня идеал - это функция std::list<std::string> parse (std::string source, std::string separator). Потому что она ясна и понятна, что и как. И чтобы её использовать нет нужды писать магические слова. И мой коллега по работе поймёт эту функцию Веселый
Хорошо, а теперь допустим, задача чуть усложнилась и Вам нужен другой алгоритм для разбиения строки на токены (например, что то подобное алгоритму offset_separator)..
Вы будете писать ещё один парсер для этого? 

А если нужна целая коллекция подобных алгоритмов? На каждый алгоритм свой парсер? Во что превратиться код?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Bepec
Гость
« Ответ #69 : Июль 04, 2013, 21:10 »

У меня на данный момент работают две функции на правилах + регэкспы. Всё необходимое задаётся в форме правил. Вполне понятно и просто.

PS ну и как мини аргумент - часто люди, использующие буст (я двух знаю) вместо "передавать файлы буста необходимые для сборки" требуют "скачайте буст и скопируйте по нашим путям". Очень увлекательное действие с 50 кб интернетом.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #70 : Июль 04, 2013, 21:17 »

PS ну и как мини аргумент - часто люди, использующие буст (я двух знаю) вместо "передавать файлы буста необходимые для сборки" требуют "скачайте буст и скопируйте по нашим путям". Очень увлекательное действие с 50 кб интернетом.

А с Qt таких проблем не возникает, да)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Bepec
Гость
« Ответ #71 : Июль 04, 2013, 21:19 »

В организации, где Qt стоит у каждого на компе, ибо лицензия - да, не проблема. И дистрибутив хранится в каждом подразделении и на сервере Веселый  А вот буст как "левый" пакет программ пробросить в несколько физически разделённых сетей - это надо терпение Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #72 : Июль 04, 2013, 21:59 »

Вот приаттачиваю простенький пример, чтоб можно было поиграться)
Я так понимаю, у вас этот код боевой?
Если да, то я бы добавил установку m_output_done в false в методе reset() spec_char_separator.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #73 : Июль 04, 2013, 22:31 »

Вот приаттачиваю простенький пример, чтоб можно было поиграться)
Я так понимаю, у вас этот код боевой?
Если да, то я бы добавил установку m_output_done в false в методе reset() spec_char_separator.


Согласен)
Исправил.. Спасибо)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #74 : Июль 05, 2013, 13:15 »

Давайте четко сформулируем эти правила, а то ...
Давайте, тот же пример
Цитировать
(abc ")de" fg)
Мы считаем токеном все что в круглых скобках (судя по Вашим ответам Вы это прекрасно поняли). Но по жизни кавычки экранируют все что в них (строка, литерал). Поэтому здесь должен быть 1 токен (вся исходная строка)

код написан очень понятно, хотя ...
Да, мне тоже все стало ясно за минуты. Хотя мне бы понадобилось не 10 а больше минут (разобраться куда что пристроить). Но этот код никак не делает того что просили, каычки ему пофиг.

Я уже писал выше, почему считаю эту необходимость (в приорететах) избыточной.. Возможно корни таких решений растут от кривой архитектуры.
Вы можете считать что угодно, но мы говорим о дальнейшей поддержке написанного Вами кода. Вот Вы написали, др люди этим пользуются, работает. Хирак - на этой строке (см выше) ошибка. А Вас нет - ушились гулять с собачкой  Улыбающийся

Да, ну и не понял, в чем же величие буста (в данном случае)? Я так вижу что мы опять городим тот же самый велосипед, весь анализ баланса все равно на нас. С той лишь разницей что встроили его в бустовский функтор. Смысл? Так, попеть дифирамбы великому бусту, "приобщиться", пофорсить?  Улыбающийся
Записан
Страниц: 1 ... 3 4 [5] 6 7   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.311 секунд. Запросов: 23.