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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Из текста найти слова и цифры заполнить ими lineEdit  (Прочитано 8204 раз)
Aleksei
Гость
« : Декабрь 15, 2016, 22:42 »

Здравствуйте!
Нужна помощь в написании простой программки.
Имеется текст созданный другой прогой. Пример текста:
Мука: 1.002.550
Рис: 3.062.550
Пшено: 110
и т.д.

Хотел сделать самым простым и понятным для всех способом, но не нашёл как это сделать. т.е. я так понимаю забить весь текст в матрицу и перемещать курсор и проверять символ М+у+к+а, если истина то переместить курсор до начала цифры после найденного слова и вывести значение в lineEdit=1.002.550 потом убрать все точки чтобы не мешало считать итого.
И так для каждого слова делать поиск.

Нашёл способ через QString.
Делаю поиск слова Мука
Код:
void MainWindow::on_pushButton_clicked()
{
    QString s1;
    s1 = ui->textEdit->toPlainText();
    int n=0,k=0;
    QRegExp rx("\\b(Мука)\\b");
    n = s1.indexOf (rx); //индекс
    k = s1.count(rx);   // кол-во
    if (n == -1) ui->lineEdit->setText("Не найдено");
     else ui->lineEdit->setText(QString::number(n));  // выводит индекс найденного слова. Не знаю пригодится ли мне это
     ui->lineEdit_2->setText(QString::number(k)); // сколько раз встречается слово. Типа для проверки ошибки в тексте.
}
как lineEdit поместить значения?
s1.remove("."); // удаляет все точки
« Последнее редактирование: Декабрь 16, 2016, 14:44 от Aleksei » Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Декабрь 15, 2016, 23:06 »

понаписал ничего не понятно
убери точки и двоеточия - вот твой ответ, на твой вопрос )
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Декабрь 15, 2016, 23:48 »

если я правильно понял задачу, надо из каждой строки вытащить число без точек. например, вот 2 способа:
0) предварительно разбить весь текст на строки
1) найти число с помощью регулярки QRegExp rx("\\d[\\d.]*"), отрезать из него точки через rx.cap(0).remove(".");
2) банально пройтись по строке циклом и построить новую строку из чисел:
Код
C++ (Qt)
QString number;
for (int i = 0; i < line.length(); ++i)
   if (line.at(i).isDigit())
       number += line.at(i);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Aleksei
Гость
« Ответ #3 : Декабрь 16, 2016, 00:25 »

если я правильно понял задачу, надо из каждой строки вытащить число без точек. например, вот 2 способа:
0) предварительно разбить весь текст на строки
1) найти число с помощью регулярки QRegExp rx("\\d[\\d.]*"), отрезать из него точки через rx.cap(0).remove(".");
2) банально пройтись по строке циклом и построить новую строку из чисел:
Код
C++ (Qt)
QString number;
for (int i = 0; i < line.length(); ++i)
   if (line.at(i).isDigit())
       number += line.at(i);

Вот примерно то что искал. А зачем разбивать текст на строки? он ведь и так имеет строки с наименованием товара.
Только надо расставить в свои edit`ы.  1 edit  Мука:   2edit  Кол-во
и так на 6 наименований.    
« Последнее редактирование: Декабрь 16, 2016, 00:29 от Aleksei » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #4 : Декабрь 16, 2016, 01:50 »

насколько я понял, ui->textEdit содержит в себе весь этот текст
Цитировать
Мука: 1.002.550
Рис: 3.062.550
Пшено: 110
но надо ж каждую строчку отдельно рассматривать
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Aleksei
Гость
« Ответ #5 : Декабрь 16, 2016, 09:44 »

Код:
QStringList line = s1.split('\n'); //разбил на строки
ui->editkolstr->setText(QString::number(line.size())); //кол-во строк

Ругается на .isDigit  
Цитировать
bool QChar::isDigit () const
Returns true if the character is a decimal digit (Number_DecimalDigit); otherwise returns false.
Передвигаюсь по строкам
Код:
for (int i=0; i<=line.size();i++)

        for (int j = 0; j < line.length(); ++j)
в строке ищу слово Мука либо только цифры, выдаёт все строки. В чём ошибка?
« Последнее редактирование: Декабрь 16, 2016, 13:17 от Aleksei » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #6 : Декабрь 16, 2016, 17:21 »

< line.size(), а не <=. Хотя непонятно зачем нужен двойной цикл.

Ругается на .isDigit — как именно?

В чём ошибка? — без кода непонятно.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Aleksei
Гость
« Ответ #7 : Декабрь 16, 2016, 17:56 »

если делаю < line.size() то одну строку не считает, хотя с рабоче программой нужно будет проверить.
На сколько я понял в line хранится инфа по строчно. В первом цикле я перемещаюсь сверху вниз с первой строки line[0] до [максимума], а во втором я пробую перемещаться по строке слева на право и искать нужно слово и цифры.
Цитировать
2) банально пройтись по строке циклом и построить новую строку из чисел:
хотя пробовал и rx обрабатывать строку. 
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #8 : Декабрь 16, 2016, 18:33 »

твой QStringList хранит строчки (например, один из элементов — «Мука: 1.002.550»), лучше обозвать эту переменную lines или lineList. А дальше ты проходишь по символам каждой строки.
Код
C++ (Qt)
QStringList lines = s1.split('\n');
for (int i=0; i < lines.size(); ++i)
{
   QString line = lines.at(i);
   for (int j = 0; j < line.length(); ++j)
   {
       QChar character = line.at(j);
       ...
   }
}
можно вообще без индексов обойтись используя range-based for из С++11 либо foreach/Q_FOREACH
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Aleksei
Гость
« Ответ #9 : Декабрь 17, 2016, 01:49 »

Спасибо этот вариант хорошо работает с цифрами.
Буду искать для себя более понятный метод поиска Слова. И обработку возможных ошибок: если в строке несколько элементов.
Мука: 5.062.550Рис: 5.062.550
Кукуруза: 1.000   Фасоль: 2
Записан
Aleksei
Гость
« Ответ #10 : Январь 06, 2017, 23:23 »

Подскажите, проблема при поиске русских букв.
предупреждение: multi-character character constant [-Wmultichar]
             if (bukv == 'Рњ')   
                         ^
Код:
   
        QString line = lines.at(i);
        for (int j = 0; j < line.length(); ++j)
        {
            QChar bukv = line.at(j);
            if (bukv == 'М')  // ищу букву (русская М)
            ui->editmuk->setText(QString::number(j));
         }
с поиском английских букв работает
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #11 : Январь 07, 2017, 00:27 »

можно попробовать
Код
C++ (Qt)
u8'М'
но наверное лучше QChar(<тут hex-код буквы М из таблицы юникода>)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Aleksei
Гость
« Ответ #12 : Январь 10, 2017, 00:35 »

Нет так не работает. А без юникода никак?
Почему такие сложности?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #13 : Январь 11, 2017, 01:01 »

никак. так устроен юникод и QString/QChar.

для буквы М используй QChar(0x041C). http://www.fileformat.info/info/unicode/char/041c/index.htm
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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