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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разбор строки с цифрами средствами QT  (Прочитано 3895 раз)
tumanovalex
Гость
« : Июль 31, 2010, 10:46 »

Есть файл с 3 колонками из цифр. Колонки могут отделяться друг от друга пробелами и табуляциями, количество которых неизвестно (пользователи вводят данные по разному). Я хотел бы выделить из каждой строки по 3 числа. Не нашел функции QT для решения этой задачи, пришлось сделать как обычно в С (на примере строки):
Код:
QString sBuf = " \t 1.03   \t   123.06  \t\t     \t 15.6  \t";
  float rBufItem[3];
  sscanf(sBuf.toAscii(), "%f%f%f", &rBufItem[0], &rBufItem[1], &rBufItem[2]);
  for(i=0; i < 3; i++) {
    printf("%f\t", rBufItem[i]);
  }
Мне предложили использовать split в стринглист, появились нулевые элементы, которые нужно удалять. Предложили и другое решение:
Код:
QString string = " \t 1.03   \t   123.06  \t\t     \t 15.6  \t";
QTextStream stream ( &string );
for ( std::size_t i = 0; i < amountItems; ++i ) {
    stream >> items[ i ];
}
Однако это решение тоже не помогло при изменении строки
Код:
QString string = " \t 1.03    \tttt \t   123.06    \t\t \t    \t 15.6  \t";
  QTextStream stream ( &string );
  for (i = 0; i < 3; ++i ) {
      stream >> rBufItem[ i ];
  }
  for(i = 0; i < 3; i++) {
    printf("%f\t", rBufItem[i]);
  }
Числа стали считываться неправильно (как и при использовании sscanf даже при строке char). Подскажите, пожалуйста, как решить мою задачу средствам QT и почему приведенные выше решения не дают правильных результатов.
Записан
Sancho_s_rancho
Гость
« Ответ #1 : Июль 31, 2010, 11:38 »

Вам правильно предложили использовать QString::split().  Если уж с помощью регулярных выражений это разбиение невозможно формализовать (в чем я ооооооооооооочень сильно сомневаюсь), то это вообще невозможно формализовать. У вас есть QRegExp. Изучите документацию и напишите правило. За вас это делать никто не будет.
Пи.Си. По поводу нулевых элементов:
Код:
QStringList QString::split ( const QRegExp & rx, SplitBehavior behavior = KeepEmptyParts ) const
. Как вы думаете, что значит SplitBehavior behavior = KeepEmptyParts?
« Последнее редактирование: Июль 31, 2010, 11:42 от Sancho_s_rancho » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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