Как быстро обработать файл с большим количеством строк?

Работаю в QT Creator C++

Есть кнопка для открытия файла и чтения файла. После записи файла в QStringList нужно совершать манипуляции с данными, а именно передавать их QPoint, что бы построить график. Файл имеет 9 столбцов и больше 12 000 строчек, предполагается, что: первый столбец это Х , а все остальные это Y, таким образом получается 8 зависимостей или графиков.

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

void MainWindow::on_action_triggered() // кнопка для чтения 
{

  QFile file;
  QString f = QFileDialog::getOpenFileName(this, QString("Выберите документ"), QDir::currentPath(), "*.txt");
  file.setFileName(f);
  if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {

    while (!file.atEnd()) {

      strList << file.readLine();

    }
    file.close();
  }

  void MainWindow::on_pushButton_clicked() // кнопка для манипуляций с данными 
  {

    for (int i = 0; i < strList.size(); i++) {
      auto list1 = strList[i].split(" "); // достаёт строчку 

      for (int j = 0; j < list1.size(); j++) {
        auto d = QString(list1[j]).toDouble(); // достаёт отдельный элемент и преобразует его в 
        // предполагается, чтобы потом это число передавалось в QPointF, чтобы нарисовать график
      }

    }

    // *series << QPointF(  0 , 0);

  }

Как наверное уже поняли, изначальная идея, чтобы взять данные из файла и нарисовать график. Данные эти с миограммы Если знаете как эмулировать миограмму более простым способом, тоже просьба написать А то голову уже сломал


Ответы (1 шт):

Автор решения: neon1ks

Для ускорения можно:

  • Хранить исходные данные не в текстовом формате, а в бинарном. Операции чтения и записи будут происходить быстрее. И не нужно будет конвертировать строку в числа, где у вас скорее всего происходит ошибка.

  • Использоваться класс QStringView для операции split(), что позволит не совершать лишние копирования строк.

→ Ссылка