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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QRegExp && кириллица  (Прочитано 8244 раз)
xk
Гость
« : Сентябрь 17, 2006, 18:27 »

Подскажите, как подружить сабжи ?

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

Код:

QRegExp rx("([A-Z]+)"); // так работает на английских словах
//QRegExp rx("([А-Я]+)"); // такой регексп на русских словах отказывается работать
for(QStringList::const_iterator it = words.constBegin();
    it != words.constEnd();
    ++it)
{
  if(rx.indexIn(*it) == -1) // с кириллицей вываливаемся сюда
    QMessageBox::information(0, "Debug", "Error, can't parse: \"" + *it + "\"");
  else
    QMessageBox::information(0, "Debug", "Word:" + rx.cap(1));    
}


Видимо плохо читал Assistant. Подскажите в какую сторону копать, пожайлуста или дайте рабочий пример.

PS: win xp, qt 4.1.2[/code]
Записан
Sergeich
Гость
« Ответ #1 : Сентябрь 17, 2006, 21:31 »

В кутевом примере ( $QTDIR/examples/tools/regexp ) все прекрасно работает. Видимо ты просто забыл добавить QTextCodec::setCodecForCStrings(...)
Записан
xk
Гость
« Ответ #2 : Сентябрь 18, 2006, 09:38 »

Цитата: "Sergeich"
В кутевом примере ( $QTDIR/examples/tools/regexp ) все прекрасно работает. Видимо ты просто забыл добавить QTextCodec::setCodecForCStrings(...)


Большое спасибо!
Может кому-то понадобится, вот решение:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
Записан
bigirbis
Гость
« Ответ #3 : Сентябрь 18, 2006, 11:00 »

Как правило лучше пользоваться QTextCodec::codecForLocale()
Записан
BaltikS
Гость
« Ответ #4 : Сентябрь 18, 2006, 13:51 »

Цитата: "bigirbis"
Как правило лучше пользоваться QTextCodec::codecForLocale()

Чем интересно лучше? Как раз таки если работаешь в двух системах, что исходники не перекодировать в KOI8, то как раз таки лучше кодировку указать явно  :lol:
Записан
crocus
Гость
« Ответ #5 : Сентябрь 19, 2006, 05:58 »

Чтобы не создавать новую тему про регулярные выражения:
НЕобходимо удалить  строки не содержащие шесть и более цифр подряд  
Код:

Русская 15, 9/10, 83с, л/з. 708316.
Русская 83с, с/10, юг, ч/п, ср! .

пытался по разному-не выходит.
Записан
bigirbis
Гость
« Ответ #6 : Сентябрь 19, 2006, 10:57 »

Код не осилил.
Но судя по заданию:
Код:
.*\\d{6,}.*

Если не валидно, значит мочить.
Записан
Dendy
Гость
« Ответ #7 : Сентябрь 23, 2006, 01:53 »

Цитата: "bigirbis"
Как правило лучше пользоваться QTextCodec::codecForLocale()


Вставлю своё "фи" (-:

Нужно вообще не использовать не-латинские символьІ в коде. По хорошему - загружать их из ресурсов в юникодовьІе строки.
Записан
bigirbis
Гость
« Ответ #8 : Сентябрь 24, 2006, 12:59 »

Цитировать
Вставлю своё "фи" (-:

Иногда такая вещь нужна для чтения/записи из/в локализованных файлов.
Записан
crocus
Гость
« Ответ #9 : Октябрь 13, 2006, 03:04 »

.*\\d{6,}.* не работает:
строка выглядит так-
табуляция(любые символы)табуляция(любые символы)табуляция(шесть цифр)
так вот нужно удалить строки не содержащие 6 цифр подряд
Код:

Фастовская 32м, 2/2к, 39тыс. //нужно удалить строку
Херсонская ц/3к, 40/28/6, 38. 913511.  //оставить строку
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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