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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: QString iterator  (Прочитано 19830 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Декабрь 07, 2011, 21:00 »

Ага, завелись Улыбающийся Я отвечу, но давайте "не частить", пусть и другие скажут, а то получается личная перепалка (как уже бывало). Ok?  Улыбающийся
Записан
BRE
Гость
« Ответ #16 : Декабрь 07, 2011, 21:12 »

...перепалка...
Перепалка?
Не видал ты наверное перепалок на лоре. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Декабрь 07, 2011, 21:24 »

Перепалка?
Не видал ты наверное перепалок на лоре. Улыбающийся
Я вырос в большой коммунальной квартире. Когда я стал "немного" старше я понял что просто не стоит терять время на пустые базары типа "кто круче". Говорим по делу/теме, Ok? (понты просто неинтересны)
Записан
BRE
Гость
« Ответ #18 : Декабрь 07, 2011, 21:27 »

Говорим по делу/теме, Ok? (понты просто неинтересны)
Эээ странное заявление, а я где то говорил не по делу? Да и с понтами на твоем фоне я просто блекну. Улыбающийся
Записан
andrew.k
Гость
« Ответ #19 : Декабрь 07, 2011, 22:03 »

А почему ты так не хочешь с регэкспами разобраться? На это нужно не больше дня с нуля.
Чтобы простенькие писать и час достаточно.
Столько же времени потребуется каждому члену твоей команды.
Ну пару дней. Регэкспы целиком решают твою задачу.
Записан
vregess
Гость
« Ответ #20 : Декабрь 07, 2011, 23:14 »

Цитировать
Беда в том что мне придется заставлять это делать других (я не один работаю над проектом) - и этого очень хотелось бы избежать.

Ну что такого уж "страшно-невозможного" я хочу? У меня нет никакого желания тягаться с (Q)RegExp, пусть он будет в 100 раз мощнее. Но для конкретных нужд простенький (lite) тул был бы куда полезнее.

Ну раз работает группа людей, и нужен lite tool и ваще все лень, то вот пожалуйста: http://goo.gl/xsTRq
Тот же самый регэксп обернутый в класс + несколько полезных методов.
Теперь можно и так:
Код:
    RxTokenizer tk("color = (1.34, 0.21, 0.2),  x = 1.23e-5f,.");

    while(tk.hasNext())
        qDebug() << tk.nextToken();

//     "color" "=" "(" "1.34" "0.21" "0.2" ")" "x" "=" "1.23e-5f"

и вот так
Код:
    RxTokenizer tk("color = (1.34, 0.21, 0.2),  x = 1.23e-5f,.  ");
    tk.addToken(",\\.");

    while(tk.hasNext())
        qDebug()<< tk.nextToken();

//     "color" "=" "(" "1.34" "0.21" "0.2" ")" "x" "=" "1.23e-5f" ",."

и даже вот так
Код:
    RxTokenizer tk;
    tk.setTokens("\\w+");
    tk.setString("color = (1.34, 0.21, 0.2),  x = 1.23e-5f,.  ");

    while(tk.hasNext())
        qDebug()<< tk.nextToken();

    // "color" "1" "34" "0" "21" "0" "2" "x" "1" "23e" "5f"


    tk.setString("color red green,blue");
    while(tk.hasNext())
        qDebug()<< tk.nextToken();

    // "color" "red" "green" "blue"


Кстати, неплохой класс вырисовывается, может у себя применю.

PS
Я тоже не особо понимаю, почему не хочешь применить регэкспы. Ну да, народу придется поднапрячься и самому оторваться от более нужных дел, но ведь "захотелось удобств" - значит какие-то ресурсы ты готов потратить, чтоб достичь этих удобств...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Декабрь 08, 2011, 00:47 »

Ну раз работает группа людей, и нужен lite tool и ваще все лень, то вот пожалуйста: http://goo.gl/xsTRq
Не стоит раздражаться, ленивых и халявщиков у нас нет. Сейчас разбор сделан на простом С - это имеет свои плюсы и минусы. Разумеется, та "задача" что я привел - это так, просто для примера. Она не выдумана, но текстовики попадаются очень разные, это всего лишь простейший случай. Мозгуем как лучше подойти "ваще"  Улыбающийся Если Вы умеете (немного) читать между строк - наверное Вы поняли что речь (последовательный доступ) идет о файле (потоке, stream).
Записан
vregess
Гость
« Ответ #22 : Декабрь 08, 2011, 12:27 »

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

Сейчас разбор сделан на простом С - это имеет свои плюсы и минусы. Разумеется, та "задача" что я привел - это так, просто для примера. Она не выдумана, но текстовики попадаются очень разные, это всего лишь простейший случай. Мозгуем как лучше подойти "ваще"  Улыбающийся Если Вы умеете (немного) читать между строк - наверное Вы поняли что речь (последовательный доступ) идет о файле (потоке, stream).
К сожалению я оказался плохим телепатом.

Ну и по делу.
regex не устраивает, хорошо.
Боюсь предложить, но возможно все-таки boost.spirit?
Хотя нет. Пробуем другой вариант сперва - boost.tokenizer:

Код:
#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>

int main(int argc, char **argv)
{
    typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
    std::string str = "color = (1.34, 0.21, 0.2),  x = 1.23e-5f,.";

    boost::char_separator<char> sep(" ,", "()=");
    tokenizer tokens(str, sep);

    tokenizer::iterator it = tokens.begin();
    for(; it != tokens.end(); ++it)
       std::cout << "<" << *it << "> ";
    std::cout << std::endl;

    return 1;
}
// <color> <=> <(> <1.34> <0.21> <0.2> <)> <x> <=> <1.23e-5f> <.>

Не совсем то (<.> возможно не нужна), но это лишь направление.
Ну и нужно будет с собой таскать чать заголовков буста, но это решается при помощи bcp.
Кстати, будет интересно узнать, на чем все-таки остановишься.

И опять не по делу. Может оставим ненужный официоз, если Вы не против?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Декабрь 08, 2011, 13:34 »

И опять не по делу. Может оставим ненужный официоз, если Вы не против?
Не обращайте внимания. Мне лично удобнее говорить с незнакомым человеком на Вы, говорите как Вам удобнее, нет проблем. Никакой иронии нет, наоборот, Ваши посты мне нравятся.

Контекст: проект реально большой, писался в разное время разными людьми. Почти каждому приходилось разбирать текстовик. Конечно каждый программист использовал свое, то что он лучше знает - это нормально. Это здесь "пригрелись" Улыбающийся  а у нас - половина на char *, вторая на std::string, и кто-то еще с юникодом щемится. Вот и думаем как бы поудобнее. Переделать сразу тонны кода - не получится, да и не нужно (работает - ото нехай работает). но по крайней мере каждый новый разбор начинать не с нуля (увы, сейчас это так).

Перетерли, мнения конечно разные. Все понимают что нет "волшебной палочки", писать специфику так или иначе придется. Все сошлись на одном: базовый класс должен предоставлять возможность читать "токен за токеном", дальше крутить легко.

Понятие "токен" определено давно, и я лично никогда не слышал чтобы хоть что-нибудь изменилось. Грубо/приближенно

- это число? (обратите внимание что возможны спецификаторы, напр 12L, 256UL, 88LL, 5.43f)
- это "альфа"?  (space/tab)
- это буква или цифра?

Если все "нет" тогда это токен - единичный символ, напр =, запятая и.т.п. Возникают сложности с национальными алфавитами (получал по рогам с "немецкими кавычками"). Вот и хочется присесть на устойчивый "сервис" - а там уж RegExp или дуст (кстати классная вещь) или еще что - дело техники, на то есть вумное слово "инкапсуляция"  Улыбающийся
Записан
andrew.k
Гость
« Ответ #24 : Декабрь 08, 2011, 13:44 »

И опять не по делу. Может оставим ненужный официоз, если Вы не против?
Не обращайте внимания. Мне лично удобнее говорить с незнакомым человеком на Вы, говорите как Вам удобнее, нет проблем.
Форум это анонимная среда, поэтому "Вы" выглядит странно.
С 12 летними детьми ты тоже на Вы? А возраст оппонентов почти всегда неизвестен.

Поэтому когда 40-летний дядя пишет "Вы  вот то да се" 16-летнему, а тот ему в ответ, "да ты, да вот это".
Это не добавляет совершенно никакой "вежливости" к сообщениям.

Использование "Вы" на форуме имеет скорее противоположное действие.

Мое имхо. Пантер будет ругаться?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #25 : Декабрь 08, 2011, 14:00 »

andrew.k, Bepec, рассадить бы вас по разным разделам форума. Веселый Кончайте флудить или буду сам удалять посты с оффтопом - не обижайтесь тогда.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vregess
Гость
« Ответ #26 : Декабрь 08, 2011, 14:26 »

Цитировать
по теме:
Специалисты, вопрос. Если написать на Qt dll, а затем попытаться её использовать скажем в С++ чистом проекте, так прокатит?

Вопрос со строками меня тоже интересовал  Пришлось даже свой класс написать, который парсит С++ код и причем довольно успешно.

Это вопрос, причем по теме. Есть мысль создать первую свою dll'ку. Соответственно жду ответа Улыбающийся


Задай себе вопрос, чем dll на Qt отличается от dll не на Qt. Правильный ответ - ничем, значит в общем случае она будет работать в чистом с++ проекте.
Тебе лишь нужно таскать с собой зависимости, ну и надо предусмотреть различного рода инициализации, например, если нужна обработка очереди сообщений.

И да, вопрос не по теме, тк тема "QString iterator".
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Декабрь 08, 2011, 14:48 »

Поэтому когда 40-летний дядя пишет "Вы  вот то да се" 16-летнему, а тот ему в ответ, "да ты, да вот это".
А вот пусть это борзое щеня и подумает "в своей ли оно тарелке" Улыбающийся Хотя конечно есть и такие кто впитал хамство с молоком <template> матери и здесь уж ничего не попишешь

Специалисты, вопрос. Если написать на Qt dll, а затем попытаться её использовать скажем в С++ чистом проекте, так прокатит?
Формально да, практически - редко, потому что почти наверняка Qt dll будет рассчитывать на вход/выход "в стиле Qt"

Вопрос со строками меня тоже интересовал  Пришлось даже свой класс написать, который парсит С++ код и причем довольно успешно.
Ну и чего Вы застеснялись? Выкладывайте, обсудим. Не обращайте внимания на (так называемых) знатоков (мол, да все уже известно и за нас придумано) - это дешевые понты, не более того
Записан
BRE
Гость
« Ответ #28 : Декабрь 08, 2011, 14:56 »

Формально да, практически - редко, потому что почти наверняка Qt dll будет рассчитывать на вход/выход "в стиле Qt"
Можно подробней про вход/выход "в стиле Qt". Спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Декабрь 08, 2011, 15:21 »

Можно подробней про вход/выход "в стиле Qt". Спасибо.
Что значит это "Спасибо" от Вас НепонимающийНепонимающий Нездоровы... разводитесь с женой.. запили.. Я теряюсь в догадках  Улыбающийся
Вопрос тоже странный. Конечно Qt dll будет рассчитывать на все имеющиеся Qt классы - и предполагать что хост тоже. Ну и там песня как импортировать классы и.т.п. Конечно такое будет работать
Код
C++ (Qt)
MY_EXPORT void DoSomething( const char * in, char * out );
 
Но оно неэффекитвно. Наверное я не понял вопроса
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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