Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.77.98] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте, Господа!
Подскажите, пожалуйста, есть ли библиотека (если есть, то где взять) для обработки строк в C под nix. Что нибудь типа парсера, так же не помешают перекодеры из одной раскладки в другю (типа: win1251 в KOI-8 и обратно). Если нечто подобное есть в стандартном комплекте, то не слишком пинайте ногами, абы C под nix я только осваиваю) |
Сообщ.
#2
,
|
|
|
Цитата HighMan @ не помешают перекодеры из одной раскладки в другю (типа: win1251 в KOI-8 и обратно). libiconv Цитата HighMan @ Подскажите, пожалуйста, есть ли библиотека (если есть, то где взять) для обработки строк в C под nix. А что требуется? Если нужен синтаксический анализ, то можно пользоваться flex/bison (или lex/yacc). |
Сообщ.
#3
,
|
|
|
есть еще strtok
|
Сообщ.
#4
,
|
|
|
Если использовать библиотеку Qt, то в ней есть такие классы как QString и QTextCodec:
Меняется примерно так: QTextCodec *pOldCodec = QTextCodec::codecForCStrings(); QString szText = query.value( n).toString(); // Получаем строку в UTF-8 pCodec = QTextCodec::codecForName( "windows-1251"); QTextCodec::setCodecForCStrings( pCodec); pCodec = QTextCodec::codecForName( "KOI8-R"); QTextCodec::setCodecForCStrings( pCodec); pCodec = QTextCodec::codecForName( "UTF-8"); QTextCodec::setCodecForCStrings( pCodec); Но ИМХО, не стоит Qt использовать только ради подобной конвертации. |
Сообщ.
#5
,
|
|
|
такс... Инфы прибыло! Меня заинтересовала Qt, Вы не могли бы рассказать о возможностях, дать линк на инфу и где это натыбать)
Заранее благодарен! |
Сообщ.
#6
,
|
|
|
Можно почитать обсуждение здесь: Qt vs. .NET
Qt демонстрация Qt Reference Documentation (Open Source Edition) |
Сообщ.
#7
,
|
|
|
Такс.. К сожалению с самого начала я не уточнил, что писанина будет только под консоль.
Возник еще вопрос: как использовать нечто, напоминающие DLL для Виндовс? Просто есть определенный код, который будет использовать много мелких программок (cgi), мне кажется, что лучше чем статически линковать один и тот же код к множеству ЦГИшек, оформить его, как некий DLL. Возможен и еще вариант: ЦГИшка вызывает некий выполняемый файл, передает в него данные для обработки (в этом варианте очень здорово бы между програмками организовать кусочек разделяемой памяти), вторая програмка эти данные обрабатывает и возвращает вызвавшей программе. Посоветуйте, плз, в какую сторону смотреть и стоит ли с подобным, вообще, связываться? |
Сообщ.
#8
,
|
|
|
С консолью работает также нормально, насколько мне известно также можно грузить либы как статически, так и динамически, правда я пока это не использовал. Поэтому не могу сказать, все прелести и наоборот, но если отталкиваться от реализации того, что я использовал, то думаю, что проблем не должно быть.
p.s. завтра если будет время, попробую разобраться и обьяснить, как пользоваться библиотеками... |
Сообщ.
#9
,
|
|
|
Qt4 либа стала распределённой, для работы с QString достаточно подключить QtCore модуль, в Qt4
Цитата HighMan @ оформить его, как некий DLL. есть определенный класс для работы с плагинами QPluginLoader <QtCore> вот примеры: http://doc.trolltech.com/qtopia4.2/tools-plugandpaint.html http://prog.org.ru/forum/index.php/topic,4120.0.html |
Сообщ.
#11
,
|
|
|
boost::regex
pcre |
Сообщ.
#12
,
|
|
|
Цитата Adil @ boost::regex Настоятельно не рекомендую. У меня в проекте эта штуковина рандомно заваливается. Также в состав glibc входят довольно неплохие регэкспы (#include <regex.h>), прочитать о которых можно в прилагающейся к glibc документации. |
Сообщ.
#13
,
|
|
|
Цитата linuxfan @ Настоятельно не рекомендую. У меня в проекте эта штуковина рандомно заваливается. А может не в бусте вовсе дело? |
Сообщ.
#14
,
|
|
|
Цитата archimed7592 @ А может не в бусте вовсе дело? #0 boost::object_cache<boost::re_detail::cpp_regex_traits_base<char>, boost::re_detail::cpp_regex_traits_implementation<char> >::do_get (k=@0xb580f870, max_cache_size=5) at /usr/local/lib/gcc/i686-pc-linux-gnu/4.1.1/../../../../include/c++/4.1.1/bits/stl_list.h:141 141 _M_node = _M_node->_M_next; (gdb) bt #0 boost::object_cache<boost::re_detail::cpp_regex_traits_base<char>, boost::re_detail::cpp_regex_traits_implementation<char> >::do_get (k=@0xb580f870, max_cache_size=5) at /usr/local/lib/gcc/i686-pc-linux-gnu/4.1.1/../../../../include/c++/4.1.1/bits/stl_list.h:141 #1 0x08310b6b in boost::object_cache<boost::re_detail::cpp_regex_traits_base<char>, boost::re_detail::cpp_regex_traits_implementation<char> >::get (k=@0xb580f870, max_cache_size=5) at /usr/local/include/boost-1_33_1/boost/regex/pending/object_cache.hpp:69 #2 0x00b72e4c in boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign () from /usr/local/lib/libboost_regex-gcc-mt-1_33_1.so.1.33.1 #3 0x08301587 in symbol (this=0xb580fda8, str=@0xb580fdc0) at /usr/local/include/boost-1_33_1/boost/regex/v4/basic_regex.hpp:254 Практика показывает, что все-таки в бусте О бустовом pool_allocator'е вообще молчу... |
Сообщ.
#15
,
|
|
|
Знаешь, так можно и на тривиальную ф-цию пенять передавая ей нулевой указатель:
template< class T > T set(T *x, T newValue) { T oldValue = *x; *x = newValue; return oldValue; } |