Ich arbeite an einem Programm, um eine Liste aus einer großen QStringList zu erstellen. Im Grunde wird nach einer String-Übereinstimmung eine While-Schleife beginnen, die nächsten Strings zu einer Liste hinzuzufügen. Dieser Teil funktioniert gut. Das einzige Problem, das ich habe, ist, dass das Programm unerwartet beendet wird, weil ich nicht weiß, wie ich den EOF-Mechanismus hinzufügen sollte.Setzen Sie eine While-Schleife fort, bis EOF (Qt)
-Update mit einer detaillierteren Code
Sorry für die nicht mit genug Details über meinen Code bereitstellt. So sieht mein Code jetzt aus. Also, nach dem ersten Mal die Zeichenfolge "PACKAGE TYPE" erkannt wird, verwende ich die Funktion storeLines()
Funktion, um die nächsten Strings in einer von drei Listen abhängig zu speichern. Und dies wird bis zum nächsten "PACKAGE TYPE" -Match oder EOF fortgesetzt. Die einzige Sache, die jetzt nicht richtig funktioniert, ist, wenn der Iterator auf der letzten Schnur der QStringList ist. Es erkennt irgendwie nicht, dass der nächste ist 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());
}
}
}
Vielen Dank im Voraus!
Sie wissen also, wie man die Stoppbedingung für die 'for' -Schleife schreibt, aber nicht für die' while' Schleife? Sie sollten den gleichen Check natürlich an beiden Orten verwenden. –
@IgorTandetnik Ich habe den Code vereinfacht. In Wirklichkeit ist die "while" -Schleife in einer anderen Funktion ausgeführt. Ich habe versucht, 'inline.end()' als Parameter hinzuzufügen, aber das schien nicht zu funktionieren. – Mrchacha
Nun, du müsstest es funktionieren lassen. Vergleichen Sie, um den Iterator * zu beenden * ist, wie Sie das Ende des Bereichs erkennen. Ihre Versuche, mit "NULL" zu vergleichen, sind Unsinn. –