大きなQStringListからリストを作成するプログラムを作成しています。したがって、基本的に文字列の一致後、whileループが次の文字列をリストに追加し始めます。この部分は正常に動作しています。私が持つ唯一の問題は、EOFメカニズムをどのように追加すべきか分からないので、プログラムが予期せず終了することです。私のコードについての十分な詳細を提供していないため申し訳ありませんEOF(Qt)までwhileループを続ける
より詳細なコードで更新
。これは私のコードが今見える方法です。最初の文字列「PACKAGE TYPE」が検出された後、関数storeLines()
を使用して、次の文字列を3つのリストのいずれかに格納します。そして、これは次の "PACKAGE TYPE"マッチまたは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」と比較しようとするのはナンセンスです。 –