Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ разбиение строк!

Автор: piccoola 24.8.2011, 20:24

Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаu
idhnr902Zвtyujnd734Zрекеouthck5520Zрак
QRegExp reg (":[0-9]{3}Z");
QStringList lines = text.split(reg);
if(int j =text.indexOf(reg))
{
foreach (QString line, lines)
{
int i = j - 6;
int k = 0;
QString newline = line.mid(k-i).left(i);
return newline;
}
}


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

Автор: Алексей1153 25.8.2011, 14:19

Цитата
убрать лишние символы.

а какие символы считаются лишними ? :)

Автор: MJIbIu 25.8.2011, 15:36

Цитата(Алексей1153 @ 25.8.2011, 15:19) *
Цитата
убрать лишние символы.

а какие символы считаются лишними ? :)

Цитата(piccoola @ 24.8.2011, 21:24) *
Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаu
idhnr902Zвtyujnd734Zрекеouthck5520Zрак

Ехал грека через реку видит в реке рак - мне кажется ему это надо получить остальное выкинуть
QString r = "Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zг
рекаuidhnr902Zвtyujnd734Zрекеouthck5520Zрак"
return r.remove(QRegExp("[0-9][a-z][A-Z]")); что то придумал с ходу, мб я с RegExp напутал

Цитата(piccoola @ 24.8.2011, 21:24) *
Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаu
idhnr902Zвtyujnd734Zрекеouthck5520Zрак
QRegExp reg (":[0-9]{3}Z");
QStringList lines = text.split(reg);
if(int j =text.indexOf(reg))
{
foreach (QString line, lines)
{
int i = j - 6;
int k = 0;
QString newline = line.mid(k-i).left(i);
return newline;
}
}


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

а зачем ты дела QString newline = line.mid(k-i).left(i); ??
если хочешь склеить list и получить string тогда не проще ли будет
QString newline;
foreach (QString line, lines)
{
newline+= line;
}
return newline;

Автор: ilyabvt 25.8.2011, 17:43

   
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QString str = "Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаuidhnr902Zв
tyujnd734Zрекеouthck5520Zрак";
QString temp = "";
for (int i=0; i < str.length(); i++) {
      //собираем слово по буквам, оставляю только русские
      //1040 - код символа 'А', 1103 - 'я'
      if (str[i].unicode() >=1040 && str[i].unicode() <=1103) {
         temp = temp + str[i];
      }
      //сбрасываем слово в текстовое поле
      else if (temp != "") {
         widget.textEdit->append(temp);
         temp="";
      }
}
//если строка кончалась на русскую букву то в цикле последнее слово не успеет сброситься поэтому осуществляем проверку
if (temp != "") {
      widget.textEdit->append(temp);
      temp="";
}

Теперь каждое слово в отдельной строке.

Цитата(MJIbIu)
QRegExp("[0-9][a-z][A-Z]")

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

P.S. Да буду очень признателен, если мне объяснят почему вот так работает:
if (str[i] >='A' && str[i] <='Z')

а вот так нет:
if (str[i] >='А' && str[i] <='Я')

Автор: Litkevich Yuriy 26.8.2011, 5:42

Цитата(ilyabvt @ 25.8.2011, 20:43) *
а вот так нет:
символы с кодами выше latin1 требуют дополнительных телодвижений, так же как и вывод русского текста на виджетах, ....

Автор: ilyabvt 26.8.2011, 9:55

Цитата(Litkevich Yuriy @ 26.8.2011, 9:42) *
символы с кодами выше latin1 требуют дополнительных телодвижений, так же как и вывод русского текста на виджетах, ....

Раскрывающийся текст

Ну для вывода русского на виджетах достаточно:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

А какие телодвижения нужны тут? Хотя конечно можно написать например так:
if (QString(str[i]) >="А" && QString(str[i]) <="я")

но это не совсем то что я искал.
P.S. прошу прощения за вопросы немного не по теме.

Автор: Litkevich Yuriy 26.8.2011, 20:30

ilyabvt, ну если у тебя кодировка исходника задана явно, то имеет смысл обсудить. Тему после разделю (главное не смешивать в сообщениях, я их не могу разделить).

Яб так делал:

if (str[i] >=QChar('А') && str[i] <=QChar('Я'))
Попробуй, будет ли польза?

И, собственно, что значит не работает?

Автор: ilyabvt 26.8.2011, 21:37

Цитата
Яб так делал:
if (str[i] >=QChar('А') && str[i] <=QChar('Я'))
Попробуй, будет ли польза?

Я уже так пробовал. Не помогает.
Не работает, значит, даже если символ находиться в указанном диапазоне он все равно не проходит проверку.

Автор: DOGG 27.8.2011, 7:24

Может быть вот так
if (str[i] >='а' && str[i] <='п' || str[i] >='р' && str[i] <='я')

Автор: Litkevich Yuriy 27.8.2011, 10:37

Цитата(ilyabvt @ 27.8.2011, 0:37) *
он все равно не проходит проверку
условие ложно или наоборот истино?

Автор: ilyabvt 27.8.2011, 10:59

Цитата
Может быть вот так
if (str[i] >='а' && str[i] <='п' || str[i] >='р' && str[i] <='я')

И где логика?
Цитата
условие ложно или наоборот истино?

Условие ложно, в то время как должно быть истинно. В случае со строкой "Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zг
рекаuidhnr902Zвtyujnd734Zрекеouthck5520Zрак" вообще не один символ не удовлетворил условиям, хотя по идее должны были пройти все русские буквы.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)