Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: xk от Сентябрь 17, 2006, 18:27



Название: QRegExp && кириллица
Отправлено: 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]


Название: QRegExp && кириллица
Отправлено: Sergeich от Сентябрь 17, 2006, 21:31
В кутевом примере ( $QTDIR/examples/tools/regexp ) все прекрасно работает. Видимо ты просто забыл добавить QTextCodec::setCodecForCStrings(...)


Название: QRegExp && кириллица
Отправлено: xk от Сентябрь 18, 2006, 09:38
Цитата: "Sergeich"
В кутевом примере ( $QTDIR/examples/tools/regexp ) все прекрасно работает. Видимо ты просто забыл добавить QTextCodec::setCodecForCStrings(...)


Большое спасибо!
Может кому-то понадобится, вот решение:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));


Название: QRegExp && кириллица
Отправлено: bigirbis от Сентябрь 18, 2006, 11:00
Как правило лучше пользоваться QTextCodec::codecForLocale()


Название: QRegExp && кириллица
Отправлено: BaltikS от Сентябрь 18, 2006, 13:51
Цитата: "bigirbis"
Как правило лучше пользоваться QTextCodec::codecForLocale()

Чем интересно лучше? Как раз таки если работаешь в двух системах, что исходники не перекодировать в KOI8, то как раз таки лучше кодировку указать явно  :lol:


Название: QRegExp && кириллица
Отправлено: crocus от Сентябрь 19, 2006, 05:58
Чтобы не создавать новую тему про регулярные выражения:
НЕобходимо удалить  строки не содержащие шесть и более цифр подряд  
Код:

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

пытался по разному-не выходит.


Название: QRegExp && кириллица
Отправлено: bigirbis от Сентябрь 19, 2006, 10:57
Код не осилил.
Но судя по заданию:
Код:
.*\\d{6,}.*

Если не валидно, значит мочить.


Название: QRegExp && кириллица
Отправлено: Dendy от Сентябрь 23, 2006, 01:53
Цитата: "bigirbis"
Как правило лучше пользоваться QTextCodec::codecForLocale()


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

Нужно вообще не использовать не-латинские символьІ в коде. По хорошему - загружать их из ресурсов в юникодовьІе строки.


Название: QRegExp && кириллица
Отправлено: bigirbis от Сентябрь 24, 2006, 12:59
Цитировать
Вставлю своё "фи" (-:

Иногда такая вещь нужна для чтения/записи из/в локализованных файлов.


Название: QRegExp && кириллица
Отправлено: crocus от Октябрь 13, 2006, 03:04
.*\\d{6,}.* не работает:
строка выглядит так-
табуляция(любые символы)табуляция(любые символы)табуляция(шесть цифр)
так вот нужно удалить строки не содержащие 6 цифр подряд
Код:

Фастовская 32м, 2/2к, 39тыс. //нужно удалить строку
Херсонская ц/3к, 40/28/6, 38. 913511.  //оставить строку