Я работаю над программой для создания списка из большого QStringList. Таким образом, в основном после совпадения строк цикл while начинает добавлять следующие строки в список. Эта часть работает нормально. Единственная проблема, я имею в виду, что программа неожиданно завершает работу, потому что я не знаю, как я должен добавить механизм EOF.Продолжить цикл while до EOF (Qt)
Обновление с более детальным кодом
К сожалению, не обеспечивающих достаточно подробные сведения о моем коде. Вот как выглядит мой код сейчас. Поэтому после первого появления строки «ТИП ПАКЕТА» я использую функцию storeLines()
для хранения следующих строк в одном из трех зависимых списков. И это будет продолжаться до следующего совпадения «ТИП ПАКЕТА» или EOF. Единственное, что сейчас неправильно работает, - это когда итератор находится в последней строке QStringList. Это как-то не обнаруживает, что следующий является inputline.end()
void storeLines(QString department, QStringList::iterator current_line, QStringList::iterator endline){
while(QString::compare(*(current_line + 1),"PACKAGE TYPE") && (++current_line != endline)){ //this is not working
if(!QString::compare(department, "MDA")) mda_list.push_back(*current_line);
else if(!QString::compare(department, "SDA")) sda_list.push_back(*current_line);
else mix_list.push_back(*current_line);
}
}
void void MainWindow::on_pushButton_clicked(){
QString input = ui->listinput->toPlainText().toLatin1();
QStringList inputline = input.split("\n", QString::SkipEmptyParts);
for(QStringList::iterator pkg_header(inputline.begin()); pkg_header != inputline.end(); ++pkg_header){
if(!QString::compare(*pkg_header,"PACKAGE TYPE")){
++pkg_header;
if(!QString::compare(*pkg_header,"Department-mda:")) storeLines("MDA", pkg_header, inputline.end());
else if(!QString::compare(*pkg_header,"Department-sda:")) storeLines("SDA", pkg_header, inputline.end());
else storeLines("MIX", pkg_header, inputline.end());
}
}
}
Заранее спасибо!
Знаете ли вы, как написать условие остановки для цикла 'for', но не для цикла while? Конечно, вы должны использовать ту же проверку в обоих местах. –
@IgorTandetnik Я упростил код. В действительности цикл while в другой выполняется. Я попытался добавить параметр 'inputline.end()' в качестве параметра, но это, похоже, не сработало. – Mrchacha
Ну, вам нужно заставить его работать. Сравнение с конечным итератором * - это * то, как вы обнаруживаете конец диапазона. Ваши попытки сравнить с «NULL» - это нонсенс. –