Версия для печати темы
Форум на 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)